Intersection of Two Linked Lists
LeetCode #160 [Easy]
Problem Statement
Given the heads of two singly linked lists headA and
headB, return the node where the two lists intersect.
If no intersection, return NULL.
Example: Input: A = 4 β 1 β 8 β 4 β 5, B = 5 β 6 β 1
β 8 β 4 β 5, Output: Node with value 8
Approach 1: Hash Set
Explanation: Store nodes of first list in a set.
Traverse second list, first common node is intersection.
Time Complexity: O(m+n)
Space Complexity: O(m)
Function getIntersectionNode(headA, headB):
Create an empty set called visitedNodes
// Traverse list A and store each node reference
While headA is not null:
Add headA to visitedNodes
headA = headA.next
// Traverse list B and check for intersection
While headB is not null:
If headB exists in visitedNodes:
Return headB // Intersection found
headB = headB.next
Return null // No intersection
π‘ Think: Store nodes from A; the first B node found in the set is the intersection.
Approach 2: Two Pointer Technique
Explanation: Traverse both lists. When one reaches
end, redirect to other listβs head. They will meet at intersection.
Time Complexity: O(m+n)
Space Complexity: O(1)
Function getIntersectionNode(headA, headB):
Set pointerA = headA
Set pointerB = headB
While pointerA is not equal to pointerB:
If pointerA is null:
pointerA = headB
Else:
pointerA = pointerA.next
If pointerB is null:
pointerB = headA
Else:
pointerB = pointerB.next
Return pointerA // Either the intersection node or null
π‘ Think: Walk A then B and B then A; meeting point (or null) is the intersection.
Solve on LeetCode