Partition List

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.

Solution: ...

 1 /**
 2  * Definition for singly-linked list.
 3  * struct ListNode {
 4  *     int val;
 5  *     ListNode *next;
 6  *     ListNode(int x) : val(x), next(NULL) {}
 7  * };
 8  */
 9 class Solution {
10 public:
11     ListNode *partition(ListNode *head, int x) {
12         ListNode dummy(0);
13         ListNode* ins = &dummy;
14         ListNode* cur = &dummy;
15         dummy.next = head;
16         while(cur->next) {
17             if(cur->next->val >= x) {
18                 cur = cur->next;
19             }
20             else {
21                 if(ins == cur) {
22                     cur = cur->next;
23                     ins = ins->next;
24                 }
25                 else {
26                     ListNode* move = cur->next;
27                     cur->next = move->next;
28                     move->next = ins->next;
29                     ins->next = move;
30                     ins = move;
31                 }
32             }
33         }
34         return dummy.next;
35     }
36 };

 

posted @ 2014-04-15 11:41  beehard  阅读(114)  评论(0编辑  收藏  举报