解法一:快慢指针
slow和fast从头结点齐头并进,慢指针 slow 每次前进一步,快指针 fast 每次前进两步,如果 fast 最终遇到空指针,说明链表中没有环;如果 fast 最终和 slow 相遇,那肯定是 fast 超过了 slow 一圈,说明链表中含有环。
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func hasCycle(head *ListNode) bool {
slow, fast := head, head
for fast != nil && fast.Next != nil{
slow = slow.Next
fast = fast.Next.Next
if slow == fast{ // 快慢指针相遇,说明含有环
return true
}
}
return false
}