给你一个链表和一个特定值 x ,请你对链表进行分隔,使得所有小于 x 的节点都出现在大于或等于 x 的节点之前。你应当保留两个分区中每个节点的初始相对位置。
示例:
输入:head = 1->4->3->2->5->2, x = 3 输出:1->2->2->4->3->5
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/partition-list
【解答】
ListNode* partition(ListNode* head, int x) {
if (head == nullptr) return nullptr;
ListNode* left = new ListNode(0), *right = new ListNode(0);
ListNode* curLeft = left, *curRight = right;
while(head != nullptr){
if (head->val < x){
curLeft->next = head;
curLeft = curLeft->next;
}else{
curRight->next = head;
curRight = curRight->next;
}
head = head->next;
}
curRight->next = nullptr;
curLeft->next = right -> next;
return left->next;
}