題目描述
給定一個連結清單,判斷連結清單中是否有環。
如果連結清單中有某個節點,可以通過連續跟蹤 next 指針再次到達,則連結清單中存在環。 為了表示給定連結清單中的環,我們使用整數 pos 來表示連結清單尾連接配接到連結清單中的位置(索引從 0 開始)。 如果 pos 是 -1,則在該連結清單中沒有環。注意:pos 不作為參數進行傳遞,僅僅是為了辨別連結清單的實際情況。
如果連結清單中存在環,則傳回 true 。 否則,傳回 false 。
解題思路
- 快慢指針,如果快指針和慢指針相遇則有環,周遊完連結清單沒有相遇則無環
- 對要操作的指針判斷是否為空
代碼實作
func hasCycle(head *ListNode) bool {
if head == nil {
return false
}
fast := head.Next
slow := head
for fast != nil && fast.Next != nil {
if fast == slow {
return true
}
fast = fast.Next.Next
slow = slow.Next
}
return false
}