Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.
You should preserve the original relative order of the nodes in each of the two partitions.
For example,
Given 1->4->3->2->5->2
and x =
3,
return 1->2->2->4->3->5
.
链表的partition,也就是链表的快排,保存三个指针,一个指针指向当前链表,一个指针指向小于x的左链表,一个指针指向大于等于x的右链表
不断移动这三个指针,最后将右链表尾部置NULL,左链表指向右链表头部
/**
* 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) {
// Note: The Solution object is instantiated only once and is reused by each test case.
ListNode *ldummy = new ListNode(-1);
ListNode *rdummy = new ListNode(-1);
ListNode *lp = ldummy, *rp = rdummy, *cur = head;
while(cur != NULL) {
if(cur->val < x) {
lp->next = cur;
lp = lp->next;
cur = cur->next;
}
else {
rp->next = cur;
rp = rp->next;
cur = cur->next;
}
}
rp->next = NULL;
lp->next = rdummy->next;
return ldummy->next;
}
};