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;
}
运行

536

被折叠的 条评论
为什么被折叠?



