天天看點

leetcode-141:環形連結清單

題目描述

給定一個連結清單,判斷連結清單中是否有環。

如果連結清單中有某個節點,可以通過連續跟蹤 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
}