Menu
CoddyTech

Middle of the Linked List

同じ長さの2つの配列に格納された単方向連結リストが与えられます。ノード i は値 values[i] を持ち、ノード next[i] へのリンクを持ちます。-1 はリストの終端を表し、先頭ノードは 0 です。ノードはリストの順序どおりには格納されていないため、リンクをたどってください。

中央のノードの値を返してください。リストのノード数が偶数の場合、中央のノードは2つあります。そのうち後方のノードの値を返してください。

関数

middleNode(values: integer-array, next: integer-array) → integer
valuesinteger-array
各ノードが保持する値
nextinteger-array
各ノードがリンクしているノードのインデックス。最後のノードの場合は -1
戻り値integer
中央ノードの値。長さが偶数の場合は、中央にある2つのノードのうち2番目の値

制約

  • 1 ≤ n ≤ 5000。ここで、nはvaluesとnextの長さです。
  • -104 ≤ values[i] ≤ 104
  • 各next[i]は-1、または0からn-1までのノードインデックスです。
  • ノード 0 から始まり、リストは各ノードをちょうど1回ずつ訪れてから、-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 の順になります。5つのうち3番目はノード 4 で、その値は 5 です。配列自体の中央の要素 values[2] = 2 は別のノードです。

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

challenge icon

発展問題

リストを1回走査するだけで、先頭から3分の1の位置にあるノードを返せますか?それぞれのポインターをどのくらいの速さで進め、どこで止めますか?

コードをリセット
def middleNode(values, next):
    # ここにコードを書いてください
テストケース

ケース1

ケース2

ケース3

入力

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

期待値

5