合并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个已排序的链表的主要内容,如果未能解决你的问题,请参考以下文章

合并k个已排序的链表

[Leetcode] Merge k sorted lists 合并k个已排序的链表

合并k个已排序的链表(NC51/考察次数Top37/难度较难)

合并 K 个排序数组/向量的复杂性

Leetcode merge-k-sorted-lists(合并k路有序链表 最小堆)

K个排序链表的合并(Hard)