Menu
CoddyTech

Reverse Nodes in k-Group

困难链表python iconjava iconcpp iconc iconjs icon+10

单向链表存储在两个长度相同的数组中。节点 i 保存 values[i],并链接到节点 next[i];-1 表示链表结束,头节点是节点 0。节点可以按任意顺序存储,因此要沿着链接遍历,而不是按数组顺序遍历。

按每组 k 个节点反转链表:前 k 个节点反转,然后是接下来的 k 个节点,以此类推。最后一组如果少于 k 个节点,则保持原有顺序。按新链表的顺序返回这些值。

函数

reverseKGroup(next: integer-array, values: integer-array, k: integer) → integer-array
nextinteger-array
每个节点所链接的节点的索引;如果是最后一个节点,则为 -1
valuesinteger-array
每个节点保存的值
kinteger
每组中要反转的节点数
返回值integer-array
新列表中的值顺序

约束条件

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

示例

输入
next = [2, 3, 4, -1, 1]values = [1, 4, 2, 5, 3]k = 2
输出
[2, 1, 4, 3, 5]
解释
列表读取为 1, 2, 3, 4, 5(节点 0, 2, 4, 1, 3)。数对 1, 2 和 3, 4 的顺序颠倒了,而 5 单独的长度小于 k = 2,所以它留在最后。
challenge icon

进阶

你能用递归的方式编写它吗?每次反转一组,再对列表的其余部分递归处理。这会使用多少额外内存?

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

测试 #1

测试 #2

测试 #3

参数

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

预期输出

[2, 1, 4, 3, 5]