Menu
CoddyTech

Remove Nth Node From End of List

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

删除从链表末尾开始数的第 n 个节点,其中最后一个节点是从末尾开始数的第 1 个节点。按链表顺序返回剩余节点的值。

函数

removeNthFromEnd(values: integer-array, next: integer-array, n: integer) → integer-array
valuesinteger-array
每个节点所持有的值
nextinteger-array
每个节点指向的节点索引,最后一个节点则为 -1
ninteger
从末尾开始计数,要删除哪个节点,其中 1 表示最后一个节点
返回值integer-array
列表中剩余的值,按顺序排列;移除唯一节点后为空

约束条件

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

示例

输入
values = [5, 9, 2, 7, 6]next = [2, 3, 4, -1, 1]n = 2
输出
[5, 2, 6, 7]
解释
从节点 0 沿着链接往下看,列表是 5, 2, 6, 9, 7。倒数第 2 个是 9,位于节点 1;移除它后,剩下 5, 2, 6, 7。
challenge icon

进阶

你能否在一次遍历中找到并断开该节点,而不先计算长度?

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

测试 #1

测试 #2

测试 #3

参数

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

预期输出

[5, 2, 6, 7]