判断链表是否有环,以及找到环的入口节点,解法的证明在之前的一篇文章中给出了。
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
}