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
.
把小于x的链表单独取出组成新的链表,然后把两个链表相连。
/** * 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 || head->next==NULL) return head; ListNode* p=head; ListNode* preP=head; ListNode* newHead=NULL; ListNode* newP=newHead; while(p) { if(p->val < x) { ListNode* tmp=p->next; if(p==head) { head=tmp; preP=tmp; } if(!newHead) { newHead=p; newHead->next=NULL; newP=newHead; } else { newP->next=p; newP=newP->next; newP->next=NULL; } if(preP!=tmp) preP->next=tmp; p=tmp; } else { if(preP!=p) preP=preP->next; p=p->next; } } if(!newHead) return head; newP->next=head; return newHead; } };
时间: 2024-11-09 06:02:49