[LeetCode] [Partition List 2012-04-30]
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
.
the key point of this problem is "DO NOT FORGET TO SET 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) { if(head == NULL) return NULL; bool bBig=false; bool bSmall=false; ListNode *p=head; ListNode * pBig = NULL; ListNode * pSmall = NULL; ListNode *pHead = NULL; ListNode *pHead2 = NULL; while(p!=NULL) { int v = p->val; if(v >= x) { if(pBig==NULL) { pBig = p; pHead2 = p; } else { pBig->next=p; pBig = pBig->next; } } if(v < x) { if(pSmall==NULL) { pSmall = p; pHead = p; } else { pSmall->next=p; pSmall = pSmall->next; } } p=p->next; } !!!!!!!!//this is really import, or there will be a circle in linklist!!!!!!!!!! if(pSmall != NULL) { pSmall->next = NULL; } if(pBig != NULL) { pBig->next = NULL; } if(pHead != NULL) { pSmall->next = pHead2; } else { pHead = pHead2; } return pHead; } };