0023. 合并 K 个升序链表
题目地址(23. 合并 K 个排序链表)
https://leetcode-cn.com/problems/merge-k-sorted-lists/
题目描述
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
示例:
输入:
[
1->4->5,
1->3->4,
2->6
]
输出: 1->1->2->3->4->4->5->6
前置知识
链表
归并排序
公司
阿里
百度
腾讯
字节
思路
这道题目是合并 k 个已排序的链表,号称 leetcode 目前最难的链表题。 和之前我们解决的88.merge-sorted-array很像。 他们有两点区别:
这道题的数据结构是链表,那道是数组。这个其实不复杂,毕竟都是线性的数据结构。
这道题需要合并 k 个元素,那道则只需要合并两个。这个是两题的关键差别,也是这道题难度为
hard的原因。
因此我们可以看出,这道题目是88.merge-sorted-array的进阶版本。其实思路也有点像,我们来具体分析下第二条。 如果你熟悉合并排序的话,你会发现它就是合并排序的一部分。
具体我们可以来看一个动画

(动画来自 https://zhuanlan.zhihu.com/p/61796021 )
关键点解析
分治
归并排序(merge sort)
代码
代码支持 JavaScript, Python3, CPP
JavaScript Code:
Python3 Code:
CPP Code:
复杂度分析
时间复杂度:$O(kn*logk)$
空间复杂度:$O(logk)$
相关题目
扩展
这道题其实可以用堆来做,感兴趣的同学尝试一下吧。
大家对此有何看法,欢迎给我留言,我有时间都会一一查看回答。更多算法套路可以访问我的 LeetCode 题解仓库:https://github.com/azl397985856/leetcode 。 目前已经 37K star 啦。 大家也可以关注我的公众号《力扣加加》带你啃下算法这块硬骨头。 
最后更新于
这有帮助吗?