Menu
CoddyTech

Remove Nth Node From End of List

同じ長さの2つの配列に格納された単方向連結リストが与えられます。ノード 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回ずつ訪れ、その後 -1 に到達します。循環はありません。

例

入力
values = [5, 9, 2, 7, 6]next = [2, 3, 4, -1, 1]n = 2
出力
[5, 2, 6, 7]
説明
ノード 0 からリンクをたどると、ノード 0, 2, 4, 1, 3 を訪れるので、リストは 5, 2, 6, 9, 7 となります。末尾から2番目はノード 1、値は 9 で、それを取り除くとリストは 5, 2, 6, 7 となります。配列の要素 values[5-2] = 7 は最後のノードであり、削除するノードではありません。

lock icon提出時に隠しテスト+14件

challenge icon

発展問題

長さを先に数えずに、1回の走査でノードを見つけてリンクを解除できますか?

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