链表中环的问题,寻找环的起点

通过快慢指针解决链表环问题,快指针速度是慢指针的两倍。当两者在z点相遇,公式表示为a = (n-1)(b+c) + c,说明快指针比慢指针多走了一圈。若a = c,表示首次相遇时在环内。但需注意,当a > b+c时,快指针可能已走过两圈以上,导致错误。
摘要由CSDN通过智能技术生成

[image:67E8C0A0-FE70-4610-9789-A7A20CE0789F-13754-00003152B04EBCCF/F9B50D50-4A1C-476D-A4D1-D4F7787395AF.png]

快慢指针从a一起出发,快指针的速度是慢指针的两倍,两指针在z点相遇:
a + b = 1/2 * (a + b + n(b+c)) ==> a = (n-1)(b+c) + c , where n>=1
当n = 1,实际为快指针刚好超过慢指针1圈,也就是第一次相遇的时候:a = c
[image:440F5BB7-4B3C-483B-9BB9-7DE564695447-13754-0000316F42787C3C/IMG_1609.jpg]

因为快指针的速度是慢指针的两倍 -> 快指针多走的距离和慢指针总共走的距离相同 -> 第一次相遇的时候快指针比慢指针刚好多走了一个环 -> 慢指针走过的距离等于一个环的长度 -> 慢指针环内还没走的长度就等于走过的距离中环外的长度

	// 找到链表第一个入环节点,如果无环,返回null
	public static Nod
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值