【算法】160、相交链表

160、相交链表

题目描述

在这里插入图片描述

解题思路

1、要得出相交的节点值,就是要判断两条链表相交的位置
2、首先遍历两条链表
3、将pA,pB分别指向两条链表的头结点,并且开始往下遍历
4、假设A为长链表,B为短链表
5、我们知道,肯定会出现B链表先遍历到最后的节点,也就是指针指向null
6、当出现这种情况时,我们先将pB指向A链表的头结点,继续往下遍历
7、同时,我们也应该知道,此时长链表也会继续遍历,当它的遍历到最后的节点时,也就是指针指向null时,我们将pA指针指向B的头结点。
8、A,B两条链表继续遍历
9、当两条链表有相交时,输出pA
10、当没有交集时,返回null
具体的看下面图解

图解

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
此刻pB指向null,这时我们让pB指向A长链表的头结点
在这里插入图片描述
继续遍历,一直到pA指向null(此处过程省略,和上面一样)
pA指向pB的头结点
在这里插入图片描述
我们可以看到,这时pA到了B链表的9的位置,pB到了A链表的4的位置,之后它们会相交
在这里插入图片描述
当然也有可能存在没有相交的情况,如果没有相交我们将返回null

代码

var getIntersectionNode = function(headA, headB) {
  //清除高度差
  //同时遍历两个链表
  //一直往下遍历,会发现,短链表会先遍历完,为null,然后短链表的指针指向长链表的头指针,
  //接着当,长链表遍历到最后指向null时,将长链表的指针指向短链表的头结点
  //继续遍历,如果有相交,则会出现重合返回pA,否则返回null
  let pA = headA;
  let pB = headB;
  while(pA || pB){
    if(pA === pB) return pA;
    pA = pA === null ? headB : pA.next;
    pB = pB === null ? headA : pB.next;
  }
  return null;
}

运行

在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值