每日一题:分隔链表(LeetCode 86)

题目

给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
你应当 保留 两个分区中每个节点的初始相对位置。

示例

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

解答

/**
 * 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) {
        //创建两个指针分别指向小于x的链表的头结点和尾结点
        ListNode* lessHead = new ListNode(-1);
        ListNode* lessTail = lessHead;

        //创建两个指针分别指向大于等于x的链表的头结点和尾结点
        ListNode* greaterHead = new ListNode(-1);
        ListNode* greateTail = greaterHead;

        while(head != nullptr)
        {
            if(head->val < x)
            {
                //小于x则添加less链表
                lessTail->next = head;
                lessTail = lessTail->next;
            }
            else
            {
                //大于等于x则添加到greate链表
                greateTail->next = head;
                greateTail = greateTail->next;
            }
            //继续遍历head链表
            head = head->next;
        }

        //连接less的尾结点到greater的头结点
        lessTail ->next = greaterHead->next;
        //greate尾结点next置空(next有可能指向了小于X的结点)
        greateTail->next = NULL;
        return lessHead->next;

    }
};
扫描关注程序区
THE END
分享
二维码
打赏
海报
每日一题:分隔链表(LeetCode 86)
题目 给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分……
<<上一篇
下一篇>>