链表相交问题

来说说链表相交问题。

假设有链表L1和L2,长度分别为N1,N2

1.相交判断

(1)遍历L1,对每一个节点的地址,建立哈希set,然后遍历L2,判断L2节点在不在哈希set中。

时间复杂度:o(N1 + N2/2)

空间复杂度:o(N1)

优点:可以顺便定位交点。

缺点:需要空间复杂度。

(2)都找到最后一个节点,然后判断最后一个节点是否一样即可。

如果维护一个尾节点的变量的话,这个查找复杂度,就是常量。不然需要遍历两个链表。

优点:无需空间,如果维护尾节点,效率极高。不维护,也比较快。

缺点:无法定位相交点。

(3)L1尾节点连到L1的首节点,然后判断L2是否有环。判断方法为,设置两个指针,一个移动慢,一个移动快。快的每移动一步,都和慢的指针,比较。

注意:还有一种判断有环的方法,就是将链表地址放入一个map,使用[]放入元素,然后判断返回值,看是否为false,如果是false就有环。

这样还能找到环是从哪里开始的。


2.交点定位

(1)1中的(1)

(2)比较两个链表长度,然后让长的先移动差值,然后两个一起移动,每次移动比较。

(2)比(1)的优点是,无需空间复杂度。


3.有环链表

判断相交,可以采用,追嘛,肯定两个都会进入环,然后一快一慢就能追上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值