148. 排序鏈表(c++)


在 O(n log n) 時間復雜度和常數級空間復雜度下,對鏈表進行排序。

示例 1:

輸入: 4->2->1->3
輸出: 1->2->3->4
public:
    ListNode* sortList(ListNode* head) {
        return mergeSort(head);
    }
    ListNode* mergeSort(ListNode* node){
        if(!node || !node->next) return node;
        ListNode* fast = node;
        ListNode* slow = node;
        ListNode* breakN = node;
        while(fast && fast->next){
            fast = fast->next->next;
            breakN = slow;
            slow =slow->next;
        }
        breakN->next= nullptr;
        ListNode *l1 = mergeSort(node);
        ListNode *l2 = mergeSort(slow);
        return merge(l1,l2);
    }
    ListNode* merge(ListNode* l1,ListNode* l2){
        if(l1 == nullptr) return l2;
        if(l2 ==nullptr) return l1;
        if(l1->val <= l2->val){
            l1->next = merge(l1->next,l2);
            return l1;
        }else{
            l2->next = merge(l2->next,l1);
            return l2;
        }
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM