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

链表中环的入口结点

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
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-04 14:23
steelhead:你回的有问题,让人感觉你就是来学习的
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
昨天 11:45
你不要过来啊啊啊啊啊啊啊
码农索隆:对面:“今天你不面也得面”
点赞 评论 收藏
分享
陆续:不可思议 竟然没那就话 那就我来吧 :你是我在牛客见到的最美的女孩
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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