++/자료구조&알고리즘

[Leetcode] 21. Merge Two Sorted Lists

writtenbyrla 2024. 1. 8. 15:23

✅ 문제 - 두 정렬 리스트의 병합

 

 

내부적으로 정렬된 연결 리스트 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

 

구조를 이해하기 위해서 그려본 그림