Sort List 题解
题目来源:Sort List
Sort a linked list in O(n log n) time using constant space complexity.
解题思路: 可以用归并或者快排. merge就比较简单,一个一个比较然后将较小的放到上一个的后面。 用一个dummy省去第一个head的确定。
ListNode* merge(ListNode* head1, ListNode* head2)
{
ListNode dummy(-1);
ListNode * p = &dummy;
while(head1 && head2)
{
if(head1->val < head2->val)
{
p->next = head1;
head1 = head1->next;
}else
{
p->next = head2;
head2 = head2->next;
}
p = p->next;
}
if(head1 != NULL)
p->next = head1;
else
p->next = head2;
return dummy.next;
}然后就是递归一半一半来,如下所示:
当然也可以用快慢指针去找中间的那个。
刚开始写的快排,有的testcase过不了(数字范围全是1-3那个共30293个数),把这个testcase排除掉后,也能AC。
Last updated
Was this helpful?