Menu
CoddyTech

Reverse Nodes in k-Group

むずかしい連結リストpython iconjava iconcpp iconc iconjs icon+10

単方向連結リストは、同じ長さの2つの配列に格納されています。ノード 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回ずつ訪問してから -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

発展問題

1つのグループを逆順にして、リストの残りの部分に対して再帰する形で書けますか?それには追加でどのくらいのメモリを使いますか?

コードをリセット
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]