728x90
반응형
✔️ 오늘의 리트코드 공부 기록 – Merge Two Sorted Lists
문제 요약
정렬된 두 개의 연결 리스트 list1, list2가 주어진다.
이 두 리스트를 하나의 정렬된 연결 리스트로 병합하고, 병합된 리스트의 head를 반환하라.
✔ 문제 링크: https://leetcode.com/problems/merge-two-sorted-lists
📌 풀이 – 핵심 아이디어
1) 반복(iterative) 풀이
- Dummy Node를 만들어 head 처리의 복잡함을 제거한다.
- current 포인터를 두고 두 리스트를 비교하며 작은 값을 차례로 붙인다.
- 한 리스트가 먼저 끝나면 남은 리스트 전체를 그대로 붙인다.
class Solution {
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
ListNode dummy = new ListNode();
ListNode current = dummy;
while (list1 != null && list2 != null) {
if (list1.val <= list2.val) {
current.next = list1;
list1 = list1.next;
} else {
current.next = list2;
list2 = list2.next;
}
current = current.next;
}
// 남은 리스트 연결
if (list1 != null) current.next = list1;
if (list2 != null) current.next = list2;
return dummy.next;
}
}
2) 재귀(recursive) 풀이
- 두 리스트 중 작은 값을 가진 노드를 선택하고
- 나머지 부분은 같은 함수에 다시 맡긴다.
class Solution {
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
if (list1 == null) return list2;
if (list2 == null) return list1;
if (list1.val <= list2.val) {
list1.next = mergeTwoLists(list1.next, list2);
return list1;
} else {
list2.next = mergeTwoLists(list1, list2.next);
return list2;
}
}
}
📊 시간 / 공간 복잡도
| 시간 복잡도 | 공간 복잡도 | |
| 반복 | O(N + M) | O(1) |
| 재귀 | O(N + M) | O(N + M) 재귀 호출 스택 |
- N, M은 각 리스트의 길이
🧠 핵심 개념 & 정리
- Dummy Node 패턴
→ 연결 리스트 문제에서 head 처리와 예외 케이스를 단순화시켜준다.
🔎 멘탈 모델
두 리스트를 앞에서부터 비교하여 점진적으로 병합한다.
📌 실수 방지
- dummy는 head 기준일 뿐,
실제 결과는 dummy.next부터 시작함을 잊지 말자.
💡 팁 / 트릭
- 한 리스트가 먼저 끝나면, 남은 노드 전체를 그냥 한 줄로 붙여주면 끝이다.
🧠 사고 과정
- 두 리스트 모두 정렬되어 있기 때문에 앞에서부터 하나씩 비교한다.
- Dummy Node를 먼저 둬서 head 처리의 예외를 제거한다.
- 비교하면서 더 작은 노드를 current.next로 이어 붙인다.
- current 포인터도 항상 한 칸씩 앞으로 이동한다.
- 순회가 끝나면 남은 리스트를 그대로 이어준다.
- 결과는 dummy.next에서 시작된다.
⭐ 이번 문제에서 얻은 깨달음
- 연결 리스트 문제는 포인터 이동 규칙이 핵심이다.
- Dummy Node는 단순 편의가 아니라 예외 케이스를 없애는 구조적 도구다.
- 반복과 재귀 각각의 사고 방식 모두 익혀두면 다양한 문제에 응용할 수 있다.
- 다음 질문에 YES라면 재귀가 가능하다.
- “이 문제를 한 단계 줄여도 구조가 그대로인가?”
728x90
반응형
'Algorithms' 카테고리의 다른 글
| [LeetCode] 54. Spiral Matrix 풀이 (Java) (0) | 2026.01.19 |
|---|---|
| [LeetCode] 53. Maximum Subarray 풀이 (Java) | Kadane 알고리즘 핵심과 오답 정리 (0) | 2026.01.18 |
| [LeetCode] 49. Group Anagrams 풀이 (Java) (0) | 2026.01.15 |
| [LeetCode] 48. Rotate Image 풀이 (Java) (0) | 2026.01.14 |
| [LeetCode] Combination sums 풀이 (Java) (0) | 2026.01.13 |