0
点赞
收藏
分享

微信扫一扫

23. 合并 K 个升序链表

给你一个链表数组,每个链表都已经按升序排列。

请你将所有链表合并到一个升序链表中,返回合并后的链表。

 

示例 1:

输入: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:

输入:lists = []
输出:[]

示例 3:

输入:lists = [[]]
输出:[]

 

提示:

  • 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

class Solution {
public:
   ListNode* mergeKLists(vector<ListNode*>& lists) {
       auto cmp = [](ListNode* a, ListNode* b){return a->val > b->val;};
       priority_queue<ListNode*, vector<ListNode*>, decltype(cmp)> minHeap(cmp);
       for(int i = 0; i < lists.size(); ++i){
           while(lists[i]){
               minHeap.push(lists[i]);
               lists[i] = lists[i]->next;
           }
       }
       if(minHeap.empty()) return nullptr;
       ListNode* res = minHeap.top();
       ListNode* cur = res;
       minHeap.pop();
       while(!minHeap.empty()){
           cur->next = minHeap.top();
           minHeap.pop();
           cur = cur->next;
       }
       cur->next = nullptr;
       return res;
   }
};

举报

相关推荐

0 条评论