合併\ k k 個已排序的連結串列並將其作為一個已排序的連結串列
阿新 • • 發佈:2020-11-30
題目描述
合併\ k k 個已排序的連結串列並將其作為一個已排序的連結串列返回。分析並描述其複雜度。
示例1
輸入
複製
[{1,2,3},{4,5,6,7}]
返回值
複製
{1,2,3,4,5,6,7}
說明:本題目包含複雜資料結構ListNode,點此檢視相關資訊
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode *mergeKLists(vector<ListNode *> &lists) { ListNode fake(0); ListNode *cur = &fake; vector<ListNode *> vec; int n = lists.size(); for (int i=0;i< n;++i) { if (lists[i]) vec.push_back(lists[i]); } make_heap(vec.begin(), vec.end(),cmp); while (vec.size()) { cur -> next = vec.front(); pop_heap(vec.begin(),vec.end(),cmp); // 將first 和 n-1 進行交換 vec.pop_back(); cur = cur -> next; if (cur -> next) { vec.push_back(cur->next); push_heap(vec.begin(),vec.end(),cmp); } } return fake.next; } static bool cmp(ListNode* l1, ListNode* l2) { return l1-> val > l2->val; } };