Menu
CoddyTech

Linked List Cycle

連結リストは配列 next に格納されています。ノード i はノード next[i] にリンクし、-1 はそこでリストが終わることを意味します。先頭はノード 0 です。先頭からリンクをたどり、すでに訪れたノードに戻ってきた場合は true を、末尾に到達した場合は false を返してください。たどっても到達しないノードは、互いにループ状にリンクしていても対象外です。

関数

hasCycle(next: integer-array) → boolean
nextinteger-array
各ノードのリンク: next[i] はノード i の次のノード、または -1 です
戻り値boolean
true はノード 0 からの移動でノードを再訪した場合、false は -1 に到達した場合

制約

  • 1 ≤ next.length ≤ 104
  • -1 ≤ next[i] ≤ next.length-1
  • 複数のノードが同じノードにリンクする場合があり、headから到達できないノードもあります。

例

入力
next = [1, 2, 3, 1]
出力
true
説明
たどり方は0、1、2、3と進み、その後1に戻ります。ノード1は2回訪問されるため、リストにはノード1、2、3を通るサイクルがあります。

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

challenge icon

発展問題

追加メモリを引き続き O(1) に抑えたまま、サイクルが始まるノードも見つけられますか?

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

ケース1

ケース2

ケース3

入力

next = [1, 2, 3, 1]

期待値

true