首页 > 编程语言 > 详细

【Leetcode】合并K个排序链表

时间:2020-03-17 22:33:36      阅读:65      评论:0      收藏:0      [点我收藏+]

题目链接:合并K个排序链表


题意:合并个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。


题解:这题的前身是合并两个排序链表。在剑指里有写。可以点击链接查看。。

这个题,最好就是用小顶堆,O(nlog(K))。用c++的优先队列可以解决这个小顶堆。

把每个节点丢进优先队列,然后以出队列的顺序作为新链表顺序


代码:

 1 /**
 2  * Definition for singly-linked list.
 3  * struct ListNode {
 4  *     int val;
 5  *     ListNode *next;
 6  *     ListNode(int x) : val(x), next(NULL) {}
 7  * };
 8  */
 9 class Solution {
10 public:
11     //优先队列重载cmp函数
12     struct cmp{
13         bool operator()(ListNode* a,ListNode* b){
14             return a->val > b->val; //小顶堆
15         }
16     };
17 
18     ListNode* mergeKLists(vector<ListNode*>& lists) {
19         priority_queue<ListNode* ,vector<ListNode*> , cmp> que;
20         for(auto head:lists){
21             if(head)   que.push(head);
22         }
23 
24         ListNode* ans = new ListNode(0);
25         ListNode* res = ans;
26 
27         while(!que.empty()){
28             ListNode* p = que.top();
29             que.pop();
30             if(p->next){
31                 que.push(p->next);
32             }
33             res->next = p;
34             res = res->next;
35         }
36         return ans->next;
37     }
38 };

 

【Leetcode】合并K个排序链表

原文:https://www.cnblogs.com/Asumi/p/12513914.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!