给你一个链表数组,每个链表都已经按升序排列。
请你将所有链表合并到一个升序链表中,返回合并后的链表。
示例 1:
1 2 3 4 5 6 7 8 9 10
| 输入:lists = [[1,4,5],[1,3,4],[2,6]] 输出:[1,1,2,3,4,4,5,6] 解释:链表数组如下: [ 1->4->5, 1->3->4, 2->6 ] 将它们合并到一个有序链表中得到。 1->1->2->3->4->4->5->6
|
示例 2:
示例 3:
提示:
k == lists.length
0 <= k <= 10^4
0 <= lists[i].length <= 500
-10^4 <= lists[i][j] <= 10^4
lists[i]
按 升序 排列
lists[i].length
的总和不超过 10^4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
class Solution { public: ListNode* mergeKLists(vector<ListNode*>& lists) { if(lists.empty()) { return nullptr; }
auto cmp = [](ListNode* a, ListNode* b) {return a->val > b->val;}; priority_queue<ListNode*, vector<ListNode*>, decltype(cmp)> pq(cmp); for(auto head : lists) { if(head != nullptr) { pq.push(head); } }
ListNode* dummy = new ListNode(-1), *p = dummy; while(!pq.empty()) { ListNode* tmp = pq.top(); pq.pop(); p->next = tmp; if(tmp->next != nullptr) { pq.push(tmp->next); } p = p->next; } ListNode* head = dummy->next; delete dummy; return head; } };
|