链表相交

链表相交

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
/**

* Definition for singly-linked list.

* public class ListNode {

* int val;

* ListNode next;

* ListNode(int x) {

* val = x;

* next = null;

* }

* }

*/

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. 总结与反思


本文已被观测了
« 上一篇 主页 下一篇 »