版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sd4567855/article/details/86134352
day14, 合并K个排序链表
题目来源:leetcode
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
示例:
输入:
[
1->4->5,
1->3->4,
2->6
]
输出: 1->1->2->3->4->4->5->6
解答:先建立一个堆,之后再把链表中所有数字都放进去,之后遍历堆,一个一个弹出。。over
代码:
/**
* 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) {
priority_queue<int> record;
for( int i = 0; i < lists.size(); i++){
ListNode* P = lists[i];
while( P){
record.push( P->val);
P = P->next;
}
}
ListNode* L = ( ListNode *)malloc( sizeof( ListNode));
L->next = NULL;
while( !record.empty()){
ListNode* temp = ( ListNode *)malloc( sizeof( ListNode));
temp->val = record.top();
record.pop();
//头插法
temp->next = L->next;
L->next = temp;
}
return L->next;
}
};
运行结果: