leetcode 23. 合并K个排序链表

题目描述:

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

示例:

输入:
[
  1->4->5,
  1->3->4,
  2->6
]
输出: 1->1->2->3->4->4->5->6

 

思路分析:

利用辅助空间求解,用最大堆来存链表中的每个节点,再一次一次从堆中取出,建表。

需要注意输入的链表可能全为空,所以建完堆后,需要先判断一次堆是否为空,若为空,则直接输出空。

 

代码:

 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     ListNode* mergeKLists(vector<ListNode*>& lists) {
12         if(lists.size()==0)
13             return nullptr;
14         priority_queue<int> q;
15         int k=lists.size();
16         for(int i=0; i<k; i++)
17         {
18             ListNode* cur = lists[i];
19             while(cur)
20             {
21                 q.push(cur->val);
22                 cur = cur->next;
23             }
24         }
25         if(q.empty())
26             return nullptr;
27         // ListNode* res = new ListNode(0);
28         ListNode* pre = new ListNode(q.top());
29         q.pop();
30         while(!q.empty())
31         {
32             ListNode* tmp = new ListNode(q.top());
33             q.pop();
34             tmp->next = pre;
35             pre = tmp;
36         }
37         return pre;
38     }
39 };

 

posted @ 2019-09-02 21:55  Fzu_LJ  阅读(127)  评论(0编辑  收藏  举报