题解 | #链表中环的入口结点#
链表中环的入口结点
https://www.nowcoder.com/practice/253d2c59ec3e4bc68da16833f79a38e4
package main
func EntryNodeOfLoop(pHead *ListNode) *ListNode{
if pHead == nil || pHead.Next == nil{
return nil
}
slow,fast := pHead, pHead
hasCycle :=false
for fast != nil && fast.Next != nil {
slow = slow.Next
fast = fast.Next.Next
if slow == fast {
hasCycle = true
break
}
}
if hasCycle{
slow = pHead
for slow !=fast{
slow = slow.Next
fast = fast.Next
}
return slow
}else {
return nil
}
}
函数被命名为 EntryNodeOfLoop,它接收一个指向链表头部的指针 pHead 并返回环的入口节点(如果存在)。如果链表中没有环,则返回 nil
在这个实现中,我们使用了快慢指针来检测链表中是否存在环。如果存在环,我们会找到快慢指针相遇的节点,然后把其中一个指针(例如 slow)重新指向链表的头部。接着,我们以相同的速度移动两个指针,直到它们再次相遇,这个相遇点就是环的入口。如果链表中没有环,函数将返回 nil。
