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?