链表相交
1. 题目描述
提示
题目链接:https://leetcode.cn/problems/intersection-of-two-linked-lists-lcci/description/
2. 解题思路
核心总结
- 物理特性:一旦相交,末尾段完全重合。通过计算差值,让跑道长的指针先跑掉差值(对齐),然后同步移动,相遇处即为交点。
💡 易错点
比较的是节点地址(A == B),而非 val 值。
3. 代码实现
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
|
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
ListNode curA = headA;
ListNode curB = headB;
int lenA = 0, lenB = 0;
while(curA != null){
lenA++;
curA = curA.next;
}
while(curB != null){
lenB++;
curB = curB.next;
}
curA = headA;
curB = headB;
if(lenA < lenB){
int teplen = lenA;
lenA = lenB;
lenB = teplen;
ListNode tepnode = curA;
curA = curB;
curB = tepnode;
}
int gap = lenA - lenB;
while(gap > 0){
curA = curA.next;
gap--;
}
while(curA != null){
if(curA == curB){
return curA;
}
curA = curA.next;
curB = curB.next;
}
return null;
}
}
|
4. 复杂度分析
- 时间复杂度:$O(n)$
- 空间复杂度:$O(1)$
5. 总结与反思