相交链表-情人节限定-错位时空--我肯定在几百年前就说过爱你,只是你忘了,我也没记起 走过 路过 没遇过,回头 转头 还是错。

情人节,做点浪漫的题目。
我肯定在几百年前说过爱你,只是你忘了,我也没记起,走过,路过,没遇过,回头,转头,还是错…

两个链表a1,a2,判断它们是否相遇,这里采用双指针的方法。
设两个链表的头部分别为headA,headB,
a1=a1null?headB:a1.next;
b1=b1
null?HeadA:b1.next;
也就是说两个指针分别从头开始以同样的速度遍历两个链表,假如当前的链表已将遍历完成了,那么就从另一个链表开始从头遍历。

下面我们分析这样做分别会有什么后果:
1.假如这两个链表是相交的
在这里插入图片描述
那么无论是图中的哪种情况,这两个指针终会相遇,只是时间与路程的问题。
2.两个链表不相交,假设a1的长度为length1,b1的长度为length2,那么当两链表走到(length1+length2)时,就会同时等于null。

发现了吗?两种情况最后的结果都是a1=b1,但是一个是有实际值的的,一个是null!!!!

如果是对的人,可能会错过,可能会擦肩而过,但是终究会相遇,相遇的那一刻之前,我们可能会经历无数次的错过,但是相遇之后,我们永远不会分开…
如果我们终究是不会相交的,即使走过无数遍你走过的路,也只能是不会遇到的,最后双方只能得到一个null.
但 ,真的是这样吗?假如我为了追上你加快了速度呢?那么即使我们命中注定不能相交,那我也可以遇到你的对吧。


class Solution {//双指针法
 public ListNode31 getIntersectionNode(ListNode31 headA, ListNode31 headB) {
     ListNode31 a1=headA;
     ListNode31 b1=headB;
if(headB==null||headA==null){
 return null;
}
while(a1!=b1) {
 a1 = a1 == null ? headB : a1.next;
 b1 = b1 == null ? headA : b1.next;
}
return a1;//如果相交,返回的是链表节点,否则是NULL
 }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

近藤的小橘晶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值