leetcode 23. Merge k Sorted Lists 合并k个排序链表 优先级队列
2017-09-13 11:30
447 查看
1、使用优先级队列
建立一个最小堆,保存这k个链表,最小堆的排序规则是链表首元素的大小比较,较小的排在前面。建立一个新的表头,对于堆顶,依次连接,如果堆顶的链表还有下面的元素,将其放入堆中,依次进行,知道链表为空。注意链表为空的情况。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
struct compare{
bool operator()(ListNode* a,ListNode* b){
return a->val>b->val;
}
};
ListNode* mergeKLists(vector<ListNode*>& lists) {
priority_queue<ListNode*,vector<ListNode*>,compare> q;;
for(auto List:lists)
{
if(List)
q.push(List);
}
if(q.empty()) return nullptr;
ListNode* result=q.top();
q.pop();
ListNode* cur=result;
if(cur->next)
q.push(cur->next);
while(!q.empty())
{
ListNode* temp=q.top();
q.pop();
cur->next=temp;
if(temp->next) q.push(temp->next);
cur=cur->next;
}
return result;
}
};
建立一个最小堆,保存这k个链表,最小堆的排序规则是链表首元素的大小比较,较小的排在前面。建立一个新的表头,对于堆顶,依次连接,如果堆顶的链表还有下面的元素,将其放入堆中,依次进行,知道链表为空。注意链表为空的情况。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
struct compare{
bool operator()(ListNode* a,ListNode* b){
return a->val>b->val;
}
};
ListNode* mergeKLists(vector<ListNode*>& lists) {
priority_queue<ListNode*,vector<ListNode*>,compare> q;;
for(auto List:lists)
{
if(List)
q.push(List);
}
if(q.empty()) return nullptr;
ListNode* result=q.top();
q.pop();
ListNode* cur=result;
if(cur->next)
q.push(cur->next);
while(!q.empty())
{
ListNode* temp=q.top();
q.pop();
cur->next=temp;
if(temp->next) q.push(temp->next);
cur=cur->next;
}
return result;
}
};
相关文章推荐
- W. :利用最小优先级队列实现对k个已序队列的合并排序。习题6.5-8
- [Leetcode] Merge k sorted lists 合并k个已排序的链表
- 104. 合并k个排序链表
- lintcode-104-合并k个排序链表
- 合并k个已排序的链表
- LintCode-分治-合并k个排序链表
- 104-合并k个排序链表
- 题目:合并k个排序链表
- LeetCode-Merge k Sorted Lists-合并k个排序链表-自底向上归并排序+链表操作
- 合并k个排序链表,lintcode
- [LintCode 104] 合并k个排序链表(Python)
- 第六章堆排序之“用最小堆将k个已排序链表合并为一个排序链表”(练习6.5-8)
- 合并k个排序链表
- 堆排序之“用最小堆将k个已排序链表合并为一个排序链表”
- “用最小堆将k个已排序链表合并为一个排序链表”(算法导论 练习6.5-9)
- 合并k个排序链表
- lintcode -合并k个排序链表
- LeetCodet题解--23. Merge k Sorted Lists(合并K个已排序的链表)
- LeetCode 23 Merge k Sorted Lists(合并K个已排序链表)
- 合并k个排序链表