5
5
import java .util .HashSet ;
6
6
import java .util .Set ;
7
7
8
- /**
9
- * 160. Intersection of Two Linked Lists
10
- Write a program to find the node at which the intersection of two singly linked lists begins.
11
-
12
-
13
- For example, the following two linked lists:
14
-
15
- A: a1 → a2
16
- ↘
17
- c1 → c2 → c3
18
- ↗
19
- B: b1 → b2 → b3
20
- begin to intersect at node c1.
21
-
22
- Example 1:
23
- A: 4 → 1
24
- ↘
25
- 8 → 4 → 5
26
- ↗
27
- B: 5 → 0 → 1
28
-
29
-
30
- Input: intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3
31
- Output: Reference of the node with value = 8
32
- Input Explanation: The intersected node's value is 8 (note that this must not be 0 if the two lists intersect).
33
- From the head of A, it reads as [4,1,8,4,5]. From the head of B, it reads as [5,0,1,8,4,5].
34
- There are 2 nodes before the intersected node in A; There are 3 nodes before the intersected node in B.
35
-
36
-
37
- Example 2:
38
- A: 0 -> 9 → 1
39
- ↘
40
- 2 → 4
41
- ↗
42
- B: 3
43
-
44
- Input: intersectVal = 2, listA = [0,9,1,2,4], listB = [3,2,4], skipA = 3, skipB = 1
45
- Output: Reference of the node with value = 2
46
- Input Explanation: The intersected node's value is 2 (note that this must not be 0 if the two lists intersect).
47
- From the head of A, it reads as [0,9,1,2,4]. From the head of B, it reads as [3,2,4].
48
- There are 3 nodes before the intersected node in A; There are 1 node before the intersected node in B.
49
-
50
-
51
- Example 3:
52
- A: 2 → 6 -> 4
53
-
54
- B: 1 -> 5
55
-
56
- Input: intersectVal = 0, listA = [2,6,4], listB = [1,5], skipA = 3, skipB = 2
57
- Output: null
58
- Input Explanation: From the head of A, it reads as [2,6,4]. From the head of B, it reads as [1,5].
59
- Since the two lists do not intersect, intersectVal must be 0, while skipA and skipB can be arbitrary values.
60
- Explanation: The two lists do not intersect, so return null.
61
-
62
-
63
- Notes:
64
-
65
- If the two linked lists have no intersection at all, return null.
66
- The linked lists must retain their original structure after the function returns.
67
- You may assume there are no cycles anywhere in the entire linked structure.
68
- Your code should preferably run in O(n) time and use only O(1) memory.
69
- */
70
-
71
8
public class _160 {
72
9
73
10
public static class Solution1 {
@@ -108,10 +45,11 @@ private int findLen(ListNode head) {
108
45
public static class Solution2 {
109
46
/**
110
47
* Most optimal solution:
111
- *
48
+ * <p>
112
49
* O(m+n) time
113
50
* O(1) space
114
- * credit: https://discuss.leetcode.com/topic/28067/java-solution-without-knowing-the-difference-in-len*/
51
+ * credit: https://discuss.leetcode.com/topic/28067/java-solution-without-knowing-the-difference-in-len
52
+ */
115
53
public ListNode getIntersectionNode (ListNode headA , ListNode headB ) {
116
54
if (headA == null || headB == null ) {
117
55
return null ;
@@ -134,7 +72,7 @@ public static class Solution3 {
134
72
/**
135
73
* O(m+n) time
136
74
* O(Math.max(m, n)) space
137
- * * /
75
+ */
138
76
public ListNode getIntersectionNode (ListNode headA , ListNode headB ) {
139
77
Set <ListNode > set = new HashSet <>();
140
78
while (headA != null ) {
0 commit comments