LeetCode #160 Intersection of Two Linked Lists
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:
A: a1 → a2
↘
c1 → c2 → c3
↗
B: b1 → b2 → b3
begin to intersect at node c1.
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.
Credits:
Special thanks to @stellari for adding this problem and creating all test cases.
Solution
Use two pointers which are assigned to corresponding heads of these two lists. In each iteration, check each node they point to are equal or not and move to their next node if not. Once a pointer reaches the end of a list, assign it to the head of another list.
By doing so, both pointer will go through x + y + c
which x
and y
denote to length of two list that aren’t common and c
denotes to the length of common parts. And if there is no common list, they will finally both point to None
and be the same.
Complexity
If A
and B
denote to the length of two lists, it’s clear that both pointers will move up to O(A+B) time. So it’s time complexity is O(A+B). And it’s trivial that it only uses O(1) extra space.