Orion's Studio.

算法(13)-链表相交

2024/03/11

题目(easy):

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。

图示两个链表在节点 c1 开始相交:

题目数据 保证 整个链式结构中不存在环。

注意,函数返回结果后,链表必须 保持其原始结构

思路

先移动长度差值的长度。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
const getListLen = (head) => {
let len = 0, cur = head;
while(cur) {
len++;
cur = cur.next;
}
return len;
}

const getIntersectionNode = (headA, headB) => {
let curA = headA;
let curB = headB;
let lenA = getListLen(headA);
let lenB = getListLen(headB);
if (lenA < lenB) {
[curA, curB] = [curB, curA];
[lenA, lenB] = [lenB, lenA];
}
let i = lenA - lenB;
while(i-- > 0) {
curA = curA.next;
}
while(curA && curA !== curB) {
curA = curA.next;
curB = curB.next;
}
return curA;
}
CATALOG
  1. 1. 题目(easy):
  2. 2. 思路