题目描述
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。
题目解释
参考代码
var getIntersectionNode = function(headA, headB) {
let p1 = headA,p2= headB
while(p1!==p2){
p1=p1==null?headB:p1.next
p2=p2==null?headA:p2.next
}
return p2
};
解释
使用两个指针同时开始前进,如何判断相交,关键问题是两个链表的长度又不一定相等。因此我们可以换一种思路:
解决这个问题的关键是,通过某些方式,让 p1 和 p2 能够同时到达相交节点 c1。所以,我们可以让 p1 遍历
完链表 A 之后开始遍历链表 B,让 p2 遍历完链表 B 之后开始遍历链表 A,这样相当于「逻辑上」两条链表接
在了一起。如果这样进行拼接,就可以让 p1 和 p2 同时进入公共部分,也就是同时
到达相交节点 c1。如果想不通可以自己画图看一下。
总结双指针的用法,还是非常有用的,比如快慢指针的使用,判断是否成环等。
标签:p2,p1,相交,链表,headB,headA,160 From: https://www.cnblogs.com/zx529/p/16789947.html