👀 문제
https://leetcode.com/problems/intersection-of-two-linked-lists/
👊 도전
1. 설계
- headA와 headB가 가리키는 같은 노드를 리턴(value가 같은 값이 아님)한다.
- 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. 설명
- HashSet을 이용한다
- headA의 노드들을 HashSet에 다 넣는다.
- headB를 순회하며 현재 가리키는 노드 p가 set에도 있다면 p가 교차점이 된다.
- 참고로, 교차점은 val이 같은 노드가 아니라 주소까지 모조리 같은 것을 의미한다.
👏 해결 완료!
문제 이해하는데 시간이 더 걸리는 듯