美文网首页
[Leetcode] 148. Sort List

[Leetcode] 148. Sort List

作者: 叶孤陈 | 来源:发表于2017-07-21 07:22 被阅读0次

    Sort a linked list in O(n log n) time using constant space complexity.

    解题思路:
    题目限定了时间必须为O(nlgn),符合要求只有快速排序,归并排序,堆排序,而根据单链表的特点,最适于用归并排序。代码如下:

    class Solution {
    public:
        ListNode* sortList(ListNode* head) {
            if (!head || !head->next) return head;
           
            //利用快慢指针,将链表拆解为两个
            ListNode *slow = head, *fast = head, *pre = head;
            while (fast && fast->next) {
                pre = slow; //pre指向第一个链表最后一个元素
                slow = slow->next;
                fast = fast->next->next;
            }
            pre->next = NULL; //将链表断开
            return merge(sortList(head), sortList(slow));
        }
    
        //合并链表,链表合并不需要开辟新的空间
       //将递归与合并合二为一,与数组合并不同
        ListNode* merge(ListNode* l1, ListNode* l2) {
            if (!l1) return l2; //其中一个为空,返回另一个
            if (!l2) return l1;
            if (l1->val < l2->val) {
                l1->next = merge(l1->next, l2);
                return l1;
            } else {
                l2->next = merge(l1, l2->next);
                return l2;
            }
        }
    };
    
    

    相关文章

      网友评论

          本文标题:[Leetcode] 148. Sort List

          本文链接:https://www.haomeiwen.com/subject/toqlkxtx.html