86. Partition List
Medium
629171FavoriteShare
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.
Example:
Input: head = 1->4->3->2->5->2, x = 3 Output: 1->2->2->4->3->5
ListNode* partition(ListNode* head,int x){
ListNode* less = new ListNode(0);
ListNode* greater = new ListNode(0);
ListNode* LessHead = less;
ListNode* GreaterHead = greater;
ListNode* Current = head;
while(Current != NULL){
ListNode* next = Current->next;//用next保存Current->next,防止断链
if(Current->val < x){
less->next = Current;
less = less->next;
less->next = NULL;
}
else{
greater->next = Current;
greater = greater->next;//greater与Current指向的是同一内存单元
greater->next = NULL; //Current->next = NULL
}
Current = next;
}
less->next = GreaterHead->next;
return LessHead->next;
}
分析:时间复杂度O(n),空间复杂度O(n)