题解 | #链表中环的入口结点#
链表中环的入口结点
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
。