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
.
Might need to think about giving linked list problem good names....
ListNode* partition(ListNode* head, int x) {
if(!head || !head->next) return head;
ListNode* larger = new ListNode(0);
ListNode* largerTmp = larger;
ListNode* smaller = new ListNode(0);
ListNode* newHead = smaller;
ListNode* tmp = head;
while(tmp) {
ListNode* next = tmp->next;
if(tmp->val < x) {
smaller->next = tmp;
smaller = tmp;
} else {
larger->next = tmp;
larger = tmp;
}
tmp = next;
}
larger->next = NULL;
smaller->next = largerTmp->next;
return newHead->next;
}