# 23.合并K个升序链表

TIP

标签:链表、分治

给你一个链表数组,每个链表都已经按升序排列。

请你将所有链表合并到一个升序链表中,返回合并后的链表。

示例 1:

输入:lists = [[1,4,5],[1,3,4],[2,6]]
输出:[1,1,2,3,4,4,5,6]
解释:链表数组如下:
[
  1->4->5,
  1->3->4,
  2->6
]
将它们合并到一个有序链表中得到。
1->1->2->3->4->4->5->6
1
2
3
4
5
6
7
8
9
10

示例 2:

输入:lists = []
输出:[]
1
2

示例 3:

输入:lists = [[]]
输出:[]
1
2

# 算法思路:

在解决「合并K个排序链表」这个问题之前,我们先来看一个更简单的问题:如何合并两个有序链表?假设链表 a 和 b 的长度都是n,如何在 O(n) 的时间代价以及 O(1) 的空间代价完成合并?

这个问题经常出现,为了达到空间代价是O(1),我们的宗旨是 「原地调整链表元素的next指针完成合并」。以下是合并的步骤和注意事项:

这部分的内容可以参考21题。

我们可以采用顺序合并的方式,可用一个变量ans来维护以及合并的链表,第 i 次循环把第i个链表的ans合并,答案合并在 ans 中


1
最后更新时间: 7/13/2023, 4:14:28 PM