思路:
分别用左链表串起来属于左链表的部分,用右链表串起来属于右链表的部分,然后连接左链表和右链表。(非常巧妙的想法)
/**
* 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) {
ListNode left_dummy(0);
ListNode right_dummy(0);
ListNode *left_cur = &left_dummy;
ListNode *right_cur = &right_dummy;
for(ListNode *cur = head; cur != NULL; cur = cur->next) {
if(cur->val < x) {
left_cur->next = cur;
left_cur = cur;
}else {
right_cur->next = cur;
right_cur = cur;
}
}
left_cur->next = right_dummy.next;
right_cur->next = NULL;
return left_dummy.next;
}
};