Problem
Write a program to find the node at which the intersection of two singly linked lists begins.
For example, the following two linked lists:
begin to intersect at node c1.
Example 1:
1 |
|
Example 2:
1 |
|
Example 3:
1 |
|
Notes:
- If the two linked lists have no intersection at all, return null.
- The linked lists must retain their original structure after the function returns.
- You may assume there are no cycles anywhere in the entire linked structure.
- Your code should preferably run in O(n) time and use only O(1) memory.
Explanation 1
- We can start compaing using two pointers when both list have the same length, so we move forward
diff
steps on the long linked list’s pointer. Then iterate both pointer and compare each node.
Solution 1
1 |
|
Explanation 2
- When we finish iterating one list, we move that pointer start from the beginning of another list. When two pointers meet, that node is the intesection. Because both pointers run the same length, in other word, the sum of lenA and lenB doesn’t change.
Solution 2
1 |
|