160. Intersection of Two Linked Lists
2026-03-19
리트코드 160번 풀이
문제
Intersection of Two Linked Lists
풀이
아이디어
두 리스트를 동시에 순회하면서 방문한 노드를 Set에 저장한다. 이미 Set에 있는 노드를 다시 만나는 순간, 그 노드가 교차점이다. 두 리스트에 사이클이 없으므로, Set에 중복으로 등장하는 노드는 반드시 상대 리스트에서 온 것임이 보장된다.
코드
function getIntersectionNode(headA: ListNode | null, headB: ListNode | null): ListNode | null {
let ptrA = headA,
ptrB = headB;
let nodeSet = new Set();
while (ptrA !== null || ptrB !== null) {
if (ptrA !== null) {
if (nodeSet.has(ptrA)) return ptrA;
nodeSet.add(ptrA);
ptrA = ptrA.next;
}
if (ptrB !== null) {
if (nodeSet.has(ptrB)) return ptrB;
nodeSet.add(ptrB);
ptrB = ptrB.next;
}
}
return null;
}시간 / 공간 복잡도
- 시간 복잡도: O(max(n, m)) — 두 리스트 전체 순회 (교대로 진행하므로 max(n, m))
- 공간 복잡도: O(n + m) — 모든 노드를 Set에 저장