Merge k Sorted Lists

    xiaoxiao2021-03-25  54

    本此的主題主要違歸併排序的應用Merge k Sorted Lists並且透過鏈表實現,首先我們先設置各個節點的模塊:

    Definition for singly-linked list. struct ListNode  {     int val;     ListNode *next;     ListNode(int x) : val(x), next(NULL) {} };

    實現歸併排序也不同的方法,這次使用遞歸的特性實現,創建mergeList(vector<ListNode*> list)的歸併排序主函數:

    ListNode* mergeList(vector<ListNode*> &list) { ListNode *result; if(list.empty()) return NULL; while(list.size() > 1) { result = merge(result, list[0]); list.erase(list.begin()); } }

    由於我們要實現k個鏈表的排序,所以利用vector存儲多個鏈表並將結果存放在result內,在循環中有調用merge函數下面會簡略講解,按照vector中的順序一一透過merge做歸併,再將排頭做移除。

    merge函數的作用是將兩段鏈表合併,可以看到分別有四種情況,透過比較鏈表中元素的大小,再次調用merge的函數,在參數中必須更改為l1->next或l2->next式情況而定。

    ListNode *merge(ListNode* l1, ListNode *l2) {     if(l1 == NULL){         return l2;     }     if(l2 == NULL){         return l1;     }     if(l1->val <= l2->val){         l1->next = merge(l1->next, l2);         return l1;     }     else{         l2->next = merge(l1, l2->next);         return l2;     } }

    转载请注明原文地址: https://ju.6miu.com/read-34969.html

    最新回复(0)