160. Intersection of Two Linked Lists
Algorithm1:
- traverse both lists and count len(a) and len(b)
- chop |len(b) - len(a)| nodes from the head of the longer list
- travese both lists simutaneously until two pointers hit
Algorithm2:
- let A = A+B, B = B+A such that two lists are alighn by their tails
- travese both lists simutaneously until two pointers hit
Analysis:
Both algs align the two lists by their tails.
Write a program to find the node at which the intersection of two singly linked lists begins.
For example, the following two linked lists:
1 | A: a1 → a2 |
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.
Soulution:
1 | # alg 1 |
1 | # alg 2 |