题解 | #链表中环的入口结点#

链表中环的入口结点

https://www.nowcoder.com/practice/253d2c59ec3e4bc68da16833f79a38e4

// 两种方法;一种O(n)空间复杂度;记录每个节点是否被遍历过
// 另外一种;快慢指针; 存在环的话快慢指针一定会在环中相遇;相遇之后从这个点和开始节点出发;一次一步一定会在入口处相遇
func EntryNodeOfLoop(pHead *ListNode) *ListNode {
	if pHead == nil || pHead.Next == nil {
		return nil //空节点或者单个节点不存在环
	}
	slow, fast := pHead, pHead
	for fast != nil {
		slow = slow.Next
		fast = fast.Next.Next
		if slow == fast { //快慢指针相遇;说明存在环,下一步就是把环的入口节点找出来
			fast = pHead
			for fast != slow {
				fast = fast.Next
				slow = slow.Next
			}
			//最终相遇的点就是入口节点
			return fast
		}
	}
	return nil
}

全部评论

相关推荐

07-01 13:37
门头沟学院 Java
steelhead:不是你的问题,这是社会的问题。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-01 11:47
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务