如果链表可能有环,判断两个链表是否相交?

题目来源:编程之美 《3.6 编程判断两个链表是否相交?》的扩展问题。

上网查找了写资料现做个总结。


可以分两步:(1)判断两个链表是否有环?若有环,入口点是什么?

(2)判断是否相交?


第一个问题的典型解法为设置两个指针p1和p2,p1每次走一步,p2每次走两步,若有环,则p1和p2一定会相遇,否则没有环。当p1和p2相遇时,另p2回到链表起始处,每次走一步和p1同时移动,则两者再次相遇时就是入口点。


第二个问题分一下几种情况:

(1)若两个链表均无环,若相交则两链表的尾节点必定相同。

(2)若一个有环,一个无环,则必不相交。

(3)若两者均有环,则两者的环入口点若相同则相交,否则不相交。

对于情况(1)若想求相交点,可以将两链表的长度算出结果为s1,s2。用长的减去短的得到差值d,将长的先移动d步,然后两者一起移动,则相遇点为相交点。

ps:代码就不放了,写的太烂。难过


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值