题目描述
解题思路
遇到这样的题,显然是使用快慢指针
让较长的先走length1-length2
步,然后两个再一起走,就会在同一个节点相遇
代码实现
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} headA
* @param {ListNode} headB
* @return {ListNode}
*/
var getIntersectionNode = function(headA, headB) {
if (!headA || !headB) return null;
var lengthA = getLength(headA);
var lengthB = getLength(headB);
var long, short, distance;
if (lengthA > lengthB) {
long = headA;
short = headB;
distance = lengthA - lengthB;
} else {
long = headB;
short = headA;
distance = lengthB - lengthA;
}
// 长的移动位置
while (distance--) {
long = long.next;
}
//一起走
while (long && short) {
if (long === short) {
return long;
}
long = long.next;
short = short.next;
}
return null;
};
function getLength(head) {
let count = 0;
let current = head;
while (current) {
count++;
current = current.next;
}
return count;
};