Menu
CoddyTech

Intersection of Two Linked Lists

2つの単方向連結リストが、1つのノードプール内にあります。ノード i はノード next[i] につながっており、-1 でリストが終了します。リストAはノード headA から始まり、リストBはノード headB から始まります。ノードは特定の順序で格納されているわけではないため、リンクをたどってください。

2つのリストは途中で合流する場合があります。あるノード以降、末尾まで同じノードをたどります。両方のリストに含まれる最初のノードのインデックスを返してください。共有するノードがない場合は -1 を返してください。

関数

getIntersectionNode(next: integer-array, headA: integer, headB: integer) → integer
nextinteger-array
各ノードがリンクしているノードのインデックス、またはリストの最後のノードの場合は -1
headAinteger
リストAの最初のノード
headBinteger
リストBの最初のノード
戻り値integer
2つのリストが共有する最初のノード、または -1

制約

  • 2 ≤ n ≤ 104。ここで、n は next の長さです。
  • 各next[i]は-1または0からn-1までのノードインデックスです。
  • 0 ≤ headA, headB ≤ n-1かつheadA ≠ headB。
  • どちらのリストも、ノードを2回訪れることなく-1で終わります。サイクルはありません。
  • すべてのノードは、リスト A、リスト B、またはその両方にあります。

例

入力
next = [-1, 4, 1, 5, 0, 1]headA = 3headB = 2
出力
1
説明
Aは3, 5, 1, 4, 0を訪れ、Bは2, 1, 4, 0を訪れます。ノード1以降はすべてのノードを共有し、それより前のAのノードはB上にないため、答えは1です。
challenge icon

発展問題

追加メモリ O(1) で、O(m + k) 時間でノードを見つけられますか?

コードをリセット
def getIntersectionNode(next, headA, headB):
    # ここにコードを書いてください

テスト #1

テスト #2

テスト #3

引数

next = [-1, 4, 1, 5, 0, 1]
headA = 3
headB = 2

期待される出力

1