Menu
CoddyTech

Middle of the Linked List

给你一个单向链表,存储在两个长度相同的数组中。节点 i 的值为 values[i],并链接到节点 next[i]。-1 表示链表结束,头节点是节点 0。节点在数组中的存储顺序与链表顺序不同,所以要沿着链接遍历。

返回中间节点的值。如果链表的节点数是偶数,就有两个中间节点,返回第二个中间节点的值。

函数

middleNode(values: integer-array, next: integer-array) → integer
valuesinteger-array
每个节点保存的值
nextinteger-array
每个节点所链接的节点的索引,最后一个节点为 -1
返回值integer
中间节点的值,如果长度为偶数,则取第二个中间节点的值

约束条件

  • 1 ≤ n ≤ 5000,其中 n 是 values 和 next 的长度。
  • -104 ≤ values[i] ≤ 104
  • 每个 next[i] 都是 -1,或是从 0 到 n-1 的节点索引。
  • 从节点 0 开始,列表会恰好访问每个节点一次,然后到达 -1。这里没有循环。

示例

输入
values = [4, 9, 2, 7, 5]next = [3, -1, 1, 4, 2]
输出
5
解释
从节点 0 开始沿着链接访问,会依次经过节点 0, 3, 4, 2, 1,它们的值依次为 4, 7, 5, 2, 9。中间位置对应的是节点 4,值为 5,而不是数组中间位置的元素 values[2] = 2。
challenge icon

进阶

你能否只遍历一次,就返回列表中位于三分之一处的节点?每个指针移动的速度应该是多少,你会在哪里停下?

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

测试 #1

测试 #2

测试 #3

参数

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

预期输出

5