题目链接: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;
}

本文介绍了解决寻找两个链表交点问题的两种方法。方法一采用双指针技巧,使得两个指针能在不同长度的链表中同步前进,最终相遇于交点处。方法二是常规思路,通过计算两链表长度差并调整起始位置来同步前进,直至找到交点。
1627

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



