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
C++
ListNode* partition(ListNode* head, int x) {
ListNode* preHead = new ListNode(-1);
preHead->next = head;
ListNode* pre = preHead;
while(pre->next&&pre->next->val<x)pre = pre->next;
ListNode* cur = pre->next;
while(cur)
{
if(cur->next&&cur->next->val<x)
{
ListNode* temp =cur->next;
cur->next = temp->next;
temp->next = pre->next;
pre->next = temp;
pre = pre->next;
}
else
cur = cur->next;
}
return preHead->next;
}