判断链表是否有环

165 阅读1分钟

题目出处

该题为leetcode 上面的141号题,leetcode-cn.com/problems/li…

思路:快慢指针,

  • 首先判断链表是否为空,或者链表下一节点是否为空,为空直接返回false;
  • 采用快慢指针,快指针遍历到头,为空,没有环,快指针等于慢指针,存在环,退出循环;

代码实现

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func hasCycle(head *ListNode) bool {
    if head == nil || head.Next == nil {
        return false
    }

    fast := head
    low := head

    for ; fast != nil ; {
        fast = fast.Next
        if fast == low {
           return true
        }
        if fast == nil {
            return false
        }
        fast = fast.Next
        low = low.Next

    }
    
    return false
}