✅ 문제 - 두 정렬 리스트의 병합
내부적으로 정렬된 연결 리스트 2개를 오름차순으로 병합하여 하나의 연결리스트로 만드는 문제!
✅ 풀이
💡 Point
1. 각 리스트의 노드 값을 비교하여 list1에 더 작은 수가 가도록 값을 바꿔줌
++ list1이 비어있다면 list2를 list1으로 보내야 하기 때문에 조건문에 not list1도 함께 걸어줌
2. list1의 마지막 노드가 참조할 값은 현재 list2로 함
→ mergeTwoList를 이용하여 list1의 마지막 노드가 list2의 첫 노드를 참조하게 함으로써 사실상 병합작업임
3. 정렬, 병합이 끝난 연결 리스트를 반환함
코드
class Solution:
def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:
if (not list1) or (list2 and list1.val > list2.val):
list1, list2 = list2, list1
if list1:
list1.next = self.mergeTwoLists(list1.next, list2)
return list1
구조를 이해하기 위해서 그려본 그림
'++ > 자료구조&알고리즘' 카테고리의 다른 글
[baekjoon] 2002. 추월 (1) | 2024.01.09 |
---|---|
[baekjoon] 5397. 키 로거 (0) | 2024.01.08 |
[Leetcode] 206. Reverse Linked List (0) | 2024.01.08 |
[Leetcode] 1337. The K Weakest Rows in a Matrix (0) | 2024.01.06 |
[Leetcode] 1464. Maximum Product of Two Elements in an Array (1) | 2024.01.06 |