链表中环的入口节点

133 阅读1分钟

判断链表是否有环,以及找到环的入口节点,解法的证明在之前的一篇文章中给出了。

OJ上相关题目有

现在给出本人的实现代码

func EntryNodeOfLoop(pHead *ListNode) *ListNode{
    var (
        slow = pHead
        fast = pHead
    )
    for fast != nil {
        slow = slow.Next
        fast = fast.Next
        if fast == nil {
            break
        }
        fast = fast.Next
        if slow == fast { // 节点可能相遇了
            break
        }
    }
    if fast == nil { // 遍历到空就说明没有环
        return nil
    }
    fast = pHead
    // 找环的入口
    for slow != fast {
        slow = slow.Next
        fast = fast.Next
    }
    return fast
}