题目链接:https://leetcode-cn.com/problems/intersection-of-two-linked-lists/
方法一:
非常的巧妙优美,可以让两个节点走完自己的路再去走对方的路,从而走的节点数会是一样长的
var getIntersectionNode = function(headA, headB) {
if(!headA || !headB) return null;
let A = headA
let B = headB
while(A !== B){ //如果长度相同,且没有交点,在循环到第一轮末尾时,pA和pB会同时为null,这时就相等退出了。
A = A?A.next:headB
B = B?B.next:headA
}
return A
};
方法二:
普通方法,先计算两个链表的长度,然后将长的那个链表走到和短的一样长之后,让他俩同时走
/**
* @param {ListNode} headA
* @param {ListNode} headB
* @return {ListNode}
*/
var getIntersectionNode = function(headA, headB) {
let lenA = getLen(headA)
let lenB = getLen(headB)
if(lenA > lenB){
let tmp = lenA - lenB;
for(let i = 0;i < tmp;i++){
headA = headA.next
}
} else{
let tmp = lenB - lenA;
for(let i = 0;i < tmp;i++){
headB = headB.next
}
}
while(headA){
if(headA=== headB){
return headA
}
headA = headA.next
headB = headB.next
}
return headA
};
function getLen(head) {
let cur = 0;
while(head){
cur++;
head = head.next;
}
return cur;
}