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

链表中环的入口结点

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
}

全部评论

相关推荐

宇智波爱学习:我还没收到笔试
投递荣耀等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务