给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有小于 x 的节点都出现在大于或等于 x 的节点之前。你应当保留两个分区中每个节点的初始相对位置。
例如
输入:head = [1,4,3,2,5,2], x = 3
输出:[1,2,2,4,3,5]
LeetCode链接
维护两个链表,再组合。
/*** 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) {ListNode* small = nullptr;//比x小的ListNode* smallHead = nullptr;ListNode* large = nullptr;//比x大的ListNode* largeHead = nullptr;while (head != nullptr) {if (head->val < x) {if(smallHead == nullptr)//小头{smallHead = head;small = smallHead;}else{small->next = head;small = small->next;}} else {if(largeHead == nullptr)//大头{largeHead = head;large = largeHead;}else{large->next = head;large = large->next;}}head = head->next;}if(large){large->next = nullptr;}if(small){small->next = largeHead;return smallHead;} return largeHead;}
};
LeetCode提交了几次,都不一样