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

链表中环的入口结点

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

package main

func EntryNodeOfLoop(pHead *ListNode) *ListNode {
	fast, slow := pHead, pHead
	for fast != nil && fast.Next != nil {
		fast = fast.Next.Next
		slow = slow.Next
		// 说明有环
		if slow == fast {
			break
		}
	}

	// 无环
	if fast == nil || fast.Next == nil {
		return nil
	}

	// slow 和 fast 相遇
	// 假设 slow 走了 k 步,即 起点 到 相遇点 为 k, fast 一定走了 2k 步
	// 环入口 与 相遇点 距离设为 m,则有 (相遇点 到 环入口 为 k - m ) == (起点 到 环入口 k - m)
	// 此时分别从 起点 和 相遇点 同时出发, slow 和 fast 以相同的速度走 k - m 即可到达入口
	slow = pHead
	for slow != fast {
		slow = slow.Next
		fast = fast.Next
	}

	return slow
}

全部评论

相关推荐

昨天 11:08
门头沟学院 Java
投递京东等公司10个岗位
点赞 评论 收藏
分享
程序员小白条:这比例牛逼,750:1
点赞 评论 收藏
分享
05-27 14:57
西北大学 golang
强大的社畜在走神:27届真不用急,可以搞点项目、竞赛再沉淀沉淀,我大二的时候还在天天打游戏呢
投递华为等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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