LeetCode141 环形链表

47 阅读1分钟

leetcode.cn/problems/li…

解法一:快慢指针

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
}