IT/알고리즘

[Leetcode]21. Merge Two Sorted Lists

어센트 2020. 9. 25. 17:36

알고리즘 시간에 배웠던 합병정렬의 반복적 기법으로 문제를 해결했다. 책을 보니 재귀를 이용한 방법이 있었다.

 

 

배운점

  • 무조건 헤드에 값을 넣으려고 하지말자 어차피 return head.next 로 해결할 수 있다.
  • 연결리스트를 이어줄 때 어차피 끝까지 순회하면서 수정되니까 따로 값만 전달할 필요없이 바로 리스트 값을 저장해주어도 문제되지않는다.
  • 파이썬에서 비어있을 때는 not명령어를 이용한다.

반복적 풀이

def mergeTwoLists2(self, l1: ListNode, l2: ListNode) -> ListNode:
        if not l1 and not l2:
            return None

        head = temp = ListNode()
        while l1 and l2:
            if l1.val <= l2.val:
                temp.next = l1
                l1 = l1.next
            else:
                temp.next = l2
                l2 = l2.next
            temp = temp.next

        if l1 or l2:
            temp.next = l1 or l2

        return head.next

재귀적 풀이

def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
        if not l1 or (l2 and l1.val > l2.val):
            l1 , l2 = l2, l1
        if l1:
            l1.next = self.mergeTwoLists(l1.next,l2)
        return l1