[JAVA/LeetCode] Top 100 Liked Question: 160. Intersection of Two Linked Lists

👀 문제

https://leetcode.com/problems/intersection-of-two-linked-lists/

👊 도전

1. 설계

  1. headA와 headB가 가리키는 같은 노드를 리턴(value가 같은 값이 아님)한다.
  2. headA의 노드들을 HashSet에 저장하고, headB를 순회하며 겹치는 노드부터의 리스트를 리턴한다.

2. 구현

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
 *
 * @author HEESOO
 *
 */
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) { 
        HashSet<ListNode> set=new HashSet<>();
        ListNode p=headA;
        while(p!=null){ // headA의 노드들을 HashSet에 저장
            set.add(p);
            p=p.next;
        }
        
        p=headB;
        while(p!=null){ // headB 순회
            if(set.contains(p)) break; // headA와 같은 노드(교차점)를 발견했다면
            else p=p.next;
        }
        
        return p;
    }
}

3. 결과

실행결과 🤟 성공 🤟

4. 설명

  1. HashSet을 이용한다
    • headA의 노드들을 HashSet에 다 넣는다.
    • headB를 순회하며 현재 가리키는 노드 p가 set에도 있다면 p가 교차점이 된다.
    • 참고로, 교차점은 val이 같은 노드가 아니라 주소까지 모조리 같은 것을 의미한다.

👏 해결 완료!

문제 이해하는데 시간이 더 걸리는 듯