배고픈 개발자 이야기

[Python] MergeTwoSortedLists 본문

알고리즘 문제/LEETCODE

[Python] MergeTwoSortedLists

이융희 2021. 5. 6. 01:36
728x90

Easy난이도 Acceptence 56.6%의 문제

 

이문제는 2개의 정렬된 리스트 노드를 하나의 리스트노드로 정렬하여 반환하는 문제이다.

 

단순히 둘중하나가 None이면 남은 노드만 처리해주도록 추가하였고

둘다 있을경우 값을 비교하여 output을 만들어 내었다.

 

dummy 노드를 만들어 output에 얕은 복사후 반환하면 reverse함수를 사용하지 않아도 되지만

이번 문제에선 정답으로 만든 output이 tail을 가리키고 있기 때문에 역으로 만들어 반환하였다.

 

class Solution(object):
    def __init__(self):
        self.output = None

    # 검증은 했지만 정확한 원리파악이 필요
    def reverse(self):
        prev = None
        cur = self.output
        while cur != None:
            nextNode = cur.next
            cur.next = prev
            prev = cur
            cur = nextNode
        self.output = prev

    def mergeTwoLists(self, l1, l2):
        """
        :type l1: ListNode
        :type l2: ListNode
        :rtype: ListNode
        """
        while l1 != None or l2 != None:
            if l2 == None:
                self.output = ListNode(l1.val, self.output)
                l1 = l1.next
                continue
            if l1 == None:
                self.output = ListNode(l2.val, self.output)
                l2 = l2.next
                continue

            if l1.val <= l2.val:
                self.output = ListNode(l1.val, self.output)
                l1 = l1.next
            else:
                self.output = ListNode(l2.val, self.output)
                l2 = l2.next

        self.reverse()
        return self.output

'알고리즘 문제 > LEETCODE' 카테고리의 다른 글

[Python] SymmetricTree  (0) 2021.05.06
[Python] SingleNumber  (0) 2021.05.06
[Python] MaximumSubarray  (0) 2021.05.06
[Python] MaximumDepthofBinaryTree  (0) 2021.05.06
[Python] ClimbingStairs  (0) 2021.05.06
Comments