题目要求:
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
.
代码:
class Solution {
public:
ListNode *partition(ListNode *head, int x) {
if(head == NULL)
return head;
ListNode* virtual_head = new ListNode(0);
virtual_head->next = head;
ListNode* first_large_node = head;
ListNode* pre = virtual_head;
while(first_large_node != NULL && first_large_node->val < x )
{
pre = first_large_node;
first_large_node = first_large_node->next;
}
ListNode* cur = first_large_node;
ListNode* pre2 = first_large_node;
while(cur != NULL)
{
if(cur->val >= x)
{
pre2 = cur;
cur = cur->next;
}
else
{
pre->next = cur;
pre2->next = cur->next;
cur->next = first_large_node;
pre = cur;
cur = pre2->next;
}
}
return virtual_head->next;
}
};