您的位置:首页 > 其它

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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: