首页 > 代码库 > [LeetCode] Partition List

[LeetCode] 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.

/** * 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 head;         ListNode *p = head;         ListNode *lessHead = NULL,*greaterHead =NULL,*pLess=NULL,*pGreater=NULL;         while(p){             if(p->val < x ){                 if(lessHead == NULL){                   lessHead = p;                   pLess = p;                 }else{                    pLess->next = p;                    pLess = pLess->next;                 }             }else{                 if(greaterHead == NULL){                    greaterHead = p ;                    pGreater  = p;                 }else{                    pGreater->next = p;                    pGreater = pGreater->next;                 }             }             p = p->next;         }//end while         if(pGreater!=NULL)             pGreater->next = NULL;         if(pLess !=NULL){              pLess->next = greaterHead;              return lessHead;         }else{              return greaterHead;         }               }//end func    };