Menu
CoddyTech

Merge Two Sorted Lists

你会得到两个单向链表,它们分别存储在两个长度相同的数组中。在第一个链表中,节点 i 保存值 values1[i],并链接到节点 next1[i]。第二个链表的处理方式相同,使用 next2 和 values2。在两个链表中,-1 都表示链表结束,头节点都是节点 0。节点并未按链表顺序存储,因此要沿着链接遍历。

每个链表沿着链接按非递减顺序排列。将两个链表合并为一个有序链表,并按顺序返回其中的值。

函数

mergeTwoLists(next1: integer-array, values1: integer-array, next2: integer-array, values2: integer-array) → integer-array
next1integer-array
第一个列表中每个节点所指向节点的索引;如果是最后一个节点,则为 -1
values1integer-array
第一个列表中每个节点保存的值
next2integer-array
第二个列表中每个节点所链接的节点的索引;末尾节点则为 -1
values2integer-array
第二个列表中每个节点保存的值
返回值integer-array
合并后列表中的值,按顺序排列

约束条件

  • 1 ≤ L1 ≤ 2000,其中 L1 是 next1 和 values1 的长度。
  • 1 ≤ L2 ≤ 2000,其中 L2 是 next2 和 values2 的长度。
  • -1000 ≤ values1[i], values2[j] ≤ 1000
  • next1 的每个条目都是 -1 或第一个列表的节点索引,next2 的每个条目都是 -1 或第二个列表的节点索引。
  • 从节点 0 开始,每个列表都会恰好访问其中的每个节点一次,然后到达 -1。不存在循环。
  • 沿着其链接,每个列表都按非递减顺序排列。

示例

输入
next1 = [2, -1, 1]values1 = [1, 6, 4]next2 = [3, 2, -1, 1]values2 = [2, 7, 9, 3]
输出
[1, 2, 3, 4, 6, 7, 9]
解释
沿着链接,第一个列表访问节点 0, 2, 1,并读取 1, 4, 6;第二个列表读取 2, 3, 7, 9。每次取较小的首项,得到 1, 2, 3, 4, 6, 7, 9。
challenge icon

进阶

你能否在 O(N log k) 时间内合并 k 个有序列表,其中 N 是节点总数?

重置代码
def mergeTwoLists(next1, values1, next2, values2):
    # 在这里编写代码

测试 #1

测试 #2

测试 #3

参数

next1 = [2, -1, 1]
values1 = [1, 6, 4]
next2 = [3, 2, -1, 1]
values2 = [2, 7, 9, 3]

预期输出

[1, 2, 3, 4, 6, 7, 9]