合并k个已排序的链表
Posted vector6_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了合并k个已排序的链表相关的知识,希望对你有一定的参考价值。
合并k个已排序的链表
合并 k 个已排序的链表并将其作为一个已排序的链表返回。分析并描述其复杂度。
Input : [{1,2,3},{4,5,6,7}]
Output : {1,2,3,4,5,6,7}
/*合并 k 个已排序的链表并将其作为一个已排序的链表返回。*/
#include<vector>
#include<list>
#include<iostream>
#include<queue>
using namespace std;
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
struct compare {
bool operator()(ListNode* l1, ListNode* l2)
{
return l1->val < l2->val;
}
};
class Solution {
public:
ListNode *mergeKLists(vector<ListNode *> &lists) {
priority_queue<ListNode*, vector<ListNode*>, compare> pq;
for (auto l : lists)
{
if(l)
pq.push(l);
}
if (pq.empty())
return nullptr;
ListNode pHead(0);
ListNode* result = &pHead;
while (!pq.empty())
{
result->next = pq.top();
pq.pop();
result = result->next;
if (result->next)
pq.push(result->next);
}
return pHead.next;
}
};
以上是关于合并k个已排序的链表的主要内容,如果未能解决你的问题,请参考以下文章
[Leetcode] Merge k sorted lists 合并k个已排序的链表
合并k个已排序的链表(NC51/考察次数Top37/难度较难)