それはそれでサイクルを持っている場合、リンクされたリストを考えると、決定します。
与えられたリンクされたリストにサイクルを表すために、我々は、尾部の接続先リンクされたリスト内の位置(0インデックス)を表す整数POSを使用します。posが-1の場合は、リンクされたリストにはサイクルがありません。
例1:
入力:ヘッド= [3,2,0、-4]、POS = 1つの
出力:真
説明:サイクルがリンクされたリストであり、テール接続する第2のノードへ。
例2:
入力:ヘッド= [1,2]、POS = 0
出力:真
説明:サイクルがリンクされたリストであり、尾コネクト最初のノードです。
例3:
入力:ヘッド= [1]、POS = -1
出力:偽
解説:リンクリストにはサイクルがありません。
ファローアップ:
あなたはO(1)(すなわち一定の)メモリを使用してそれを解決することはできますか?
テストgolangの別の部分
func hasCycle(head *ListNode) bool {
if head == nil {
return false
}
fast, slow := head, head
for fast != nil {
if fast.Next == nil {
return false
}
fast = fast.Next.Next
slow = slow.Next
if fast == slow {
return true
}
}
return false
}