Menu
CoddyTech

Sort List

中等链表排序python iconjava iconcpp iconc iconjs icon+10

你会得到一个单向链表,它存储在两个长度相同的数组中。节点 i 的值为 values[i],并链接到节点 next[i]。-1 表示链表结束,头节点是节点 0。节点在数组中的存储顺序与链表顺序不同,而且数组中可能还包含从节点 0 出发遍历时永远无法到达的剩余节点。即使这些节点的链接指向链表中的节点,它们也不属于链表。

按值的非递减顺序对链表排序,并按该顺序返回节点的值。

函数

sortList(next: integer-array, values: integer-array) → integer-array
nextinteger-array
每个节点链接到的节点的索引;如果是最后一个节点,则为 -1
valuesinteger-array
每个节点保存的值
返回值integer-array
列表节点的值,按从小到大的顺序

约束条件

  • 1 ≤ n ≤ 4000,其中 n 是 next 和 values 的长度。
  • -1000 ≤ values[i] ≤ 1000
  • 每个 next[i] 都是 -1 或从 0 到 n-1 的节点索引。
  • 从节点 0 开始,列表会到达 -1,且不会重复访问任何节点。
  • 从节点 0 开始遍历时无法到达的节点不属于该列表。它们的 next 项可能指向任意位置。

示例

输入
next = [3, -1, 4, 2, 1]values = [4, 1, 3, 2, 5]
输出
[1, 2, 3, 4, 5]
解释
从节点 0 开始遍历,会访问节点 0, 3, 2, 4, 1,因此列表为 4, 2, 3, 5, 1。排序后为 1, 2, 3, 4, 5。
challenge icon

进阶

你能在 O(n log n) 时间内通过重新连接节点来排序,而不复制节点中的值吗?

重置代码
def sortList(next, values):
    # 在这里编写代码

测试 #1

测试 #2

测试 #3

参数

next = [3, -1, 4, 2, 1]
values = [4, 1, 3, 2, 5]

预期输出

[1, 2, 3, 4, 5]