• 【力扣 097】86. 分隔链表


    86. 分隔链表

    给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。

    你应当 保留 两个分区中每个节点的初始相对位置。

    示例 1:


    输入:head = [1,4,3,2,5,2], x = 3
    输出:[1,2,2,4,3,5]
    示例 2:

    输入:head = [2,1], x = 2
    输出:[1,2]
     

    提示:

    链表中节点的数目在范围 [0, 200] 内
    -100 <= Node.val <= 100
    -200 <= x <= 200

    来源:力扣(LeetCode)
    链接:https://leetcode.cn/problems/partition-list
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    ① 代码实现:

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode() : val(0), next(nullptr) {}
     *     ListNode(int x) : val(x), next(nullptr) {}
     *     ListNode(int x, ListNode *next) : val(x), next(next) {}
     * };
     */
    class Solution {
    public:
        ListNode* partition(ListNode* head, int x) 
        {
            if(!head) return head;
            ListNode *dumy1 = new ListNode(-1), *p1 = dumy1;
            ListNode *dumy2 = new ListNode(-1), *p2 = dumy2;
            ListNode *p = head;
            while(p)
            {
                if(p->val >= x)
                {
                    p2->next = p;
                    p2 = p2->next;
                }
                else
                {
                    p1->next = p;
                    p1 = p1->next;
                }
                p = p->next;
            }
            p1->next = dumy2->next;
            p2->next = nullptr;
            return dumy1->next;
        }
    };

    ② 代码实现:

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode* partition(ListNode* head, int x) 
        {
            if(!head) return head;
            ListNode* dumy = new ListNode(0), *p = dumy;
            dumy->next = head;
            ListNode *dumy2 = new ListNode(0), *curr = dumy2;
            while(p->next)
            {
                if(p->next->val >= x)
                {
                    curr->next = p->next;
                    curr = p->next;
                    p->next = p->next->next;
                }
                else
                {
                    p = p->next;
                }
            }
            curr->next = NULL;
            p->next = dumy2->next;
            return dumy->next;
        }
    };
  • 相关阅读:
    紫书 例题8-6 UVa 1606(扫描法)
    紫书 例题8-5 UVa11054(等价转换)
    紫书 例题8-4 UVa 11134(问题分解 + 贪心)
    紫书 例题8-3 UVa 1152(中途相遇法)
    紫书 例题8-2 UVa 11605(构造法)
    Codeforces Round #437 (Div. 2, based on MemSQL Start[c]UP 3.0
    2016ACM/ICPC亚洲区沈阳站
    Tenka1 Programmer Contest D
    [Gym-101512C] 凸包+最远点对
    ZOJ
  • 原文地址:https://www.cnblogs.com/sunbines/p/16332515.html
Copyright © 2020-2023  润新知