编程之美3.6—判断两个链表是否相交

解法一:

判断第一个链表的每个节点是否在第二个链表中,O(M*N);


解法二:

对第一个链表的节点地址hash排序,建立hash表,然后对第二个链表的每个节点的地址查询hash表,如出现,相交

时间复杂度O(M+N),空间复杂度O(M)。


解法三:

把第二个链表接在第一个链表后面,得到的链表有环,相交,否则,不相交。‘

第二个链表的表头一定在环上,只需从第二个链表开始遍历

时间复杂度O(N),常数空间


解法四:

如果两个没有环的链表相交于某一节点,那么在这个节点之后的所有节点都是两个链表共有的。

如果相交,则最后一个节点一定是共有的。

先遍历第一个链表,记住最后一个节点,然后遍历第二个链表,到最后一个节点时和第一个链表的最后一个节点比较,相同则相交。

时间复杂度O(M+N),空间复杂度,只用了一个额外的指针来存储最后一个节点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值