链表问题总结

1. 简单链表相交

判断是否相交,只需看表尾是否一致。

寻找相交点,只需让长链表先遍历过长出来的部分,然后与短链表同步遍历,第一个相同结点便是相交点。

2. 带圈链表

方法1,判断是否带圈,只需逆转此链表,若逆转后表尾与原表头一致,则带圈。寻找圈入口,首先逆转操作时可知操作数C = 圈外长度x 2 + 圈长度,于是从表头出发,走C步则必到圈中某结点N,然后继续遍历再次到达N时,则得到圈长度,然后得到圈外长度,最终找到圈入口。如果要求不改变原链表,则再操作一遍逆转即可还原。

方法2,两指针,慢针一次一步,快针一次两步,相遇则有圈。相遇点为N,则从表头到N的距离为圈长度的倍数。于是,取两指针,一个从表头出发,另一从N出发,几圈后两指针必相遇在N,而第一个相遇结点,即为圈入口。虽无必要,但可以证明快慢针相遇时慢针没有走完一圈:慢针在入口时,快针必在圈内某一点,此后慢针走半圈时,快针走完一整圈,期间必与慢针相遇。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值