题目地址:力扣
题目难度:Hard
涉及知识点:链表头插法、归并、优先队列(堆)
分析:
解法1:两两合并
思路:一种简单的思路就是每次进行两两合并,比如以第一个链表最为最终链表,那么把剩下的链表都合并到第一个链表上来。由于第一个链表可能为空,因此需要设计一个哨兵节点用来处理这种情况。还需要判断一下数组中没有链表和只有一个链表的情况。
这种方法的缺点就是要扫描第一个链表很多遍,会产生重复的对比,因此时间复杂度比较高,但是不需要额外的空间,因此空间复杂度较低。
class Solution {
public:
// 两个链表的合并函数
void merge(ListNode* list1, ListNode* list2)
{
// 我们插入节点,因此需要判断的是list1的next节点,而初始化的list1就是哨兵节点
while (list1->next != nullptr && list2 != nullptr)
{
// 只要list2指向节点的值小于等于list1的next节点的值,就将其插入到list1与list1的next节点的中间
if (list2->val <= list1->next->val) {
ListNode* tmp = list2;
合并K个排序链表

最低0.47元/天 解锁文章
153

被折叠的 条评论
为什么被折叠?



