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.

 

 1 class Solution {
 2 public:
 3     ListNode* partition(ListNode* head, int x) {
 4         if(head==NULL) return NULL;
 5 
 6         ListNode * less=new ListNode(0);
 7         ListNode * greater=new ListNode(0);
 8         ListNode * greaterhead=greater;
 9         ListNode * lesshead=less;
10         ListNode * p=head;
11 
12         while(p)
13         {
14             if(p->val<x)
15             {
16                 less->next=p;
17                 p=p->next;
18                 less=less->next;
19                 less->next=NULL;
20             }
21             else
22             {
23                 greater->next=p;
24                 p=p->next;
25                 greater=greater->next;
26                 greater->next=NULL;
27             }
28         }
29 
30         less->next=greaterhead->next;
31         return lesshead->next;
32     }
33 };

 

posted on 2015-05-18 13:18  黄瓜小肥皂  阅读(98)  评论(0编辑  收藏  举报