Partition List 题解
题目来源:Partition List
> 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的一个一个往最前面插入。
ListNode *partition(ListNode *head, int x)
{
ListNode dummy1(-1), dummy2(-1);
ListNode * left = &dummy1;
ListNode * right = &dummy2;
ListNode * node = head;
while(node)
{
if(node->val < x)
{
left->next = node;
left = left->next;
}else
{
right->next = node;
right = right->next;
}
node = node->next;
}
left->next = dummy2.next;
right->next = NULL;
return dummy1.next;
}
Last updated
Was this helpful?