본문 바로가기
알고리즘/Problem Solving

LeetCode - 21. Merge Two Sorted Lists

by 도툐리 2023. 4. 12.

https://leetcode.com/problems/merge-two-sorted-lists/?envType=study-plan&id=level-1 

 

Merge Two Sorted Lists - LeetCode

Can you solve this real interview question? Merge Two Sorted Lists - You are given the heads of two sorted linked lists list1 and list2. Merge the two lists in a one sorted list. The list should be made by splicing together the nodes of the first two lists

leetcode.com

 

내 풀이 1

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:
        # 맨 앞쪽에 있는 인자들을 차례로 비교하여 sorting을 진행한다.
        # 각 링크드 리스트의 맨 앞쪽에 있는 인자들은 해당 링크드 리스트에서 제일 작은 수이다.
        
        # base case
        # (0) 빈 리스트가 들어올 경우에 대한 예외처리
        if list1==None :
            if list2!=None:
                return list2
            else:
                return None
        if list2==None :
                return list1
        
        # (1) 일반적인 경우
        if list1.val>=list2.val:
            list2.next = self.mergeTwoLists(list2.next,list1)
            return list2
        else:
            list1.next = self.mergeTwoLists(list1.next,list2)
            return list1

 

음,, 속도가 너무 안좋아 보인다,, 하위 70퍼라니

 

 

두번째 풀이

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:
        # 맨 앞쪽에 있는 인자들을 차례로 비교하여 sorting을 진행한다.
        # 각 링크드 리스트의 맨 앞쪽에 있는 인자들은 해당 링크드 리스트에서 제일 작은 수이다.
        
        # base case
        # (0) 빈 리스트가 들어올 경우에 대한 예외처리
        if list1==None :
                return list2
        if list2==None :
                return list1
        
        # (1) 일반적인 경우
        if list1.val>=list2.val:
            list2.next = self.mergeTwoLists(list2.next,list1)
            return list2
        else:
            list1.next = self.mergeTwoLists(list1.next,list2)
            return list1

음,... 퍼포먼스가 기존이랑 똑같네 ;ㅅ;

 

내 풀이 3

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:
        # 맨 앞쪽에 있는 인자들을 차례로 비교하여 sorting을 진행한다.
        # 각 링크드 리스트의 맨 앞쪽에 있는 인자들은 해당 링크드 리스트에서 제일 작은 수이다.
        
        # base case
        # (0) 빈 리스트가 들어올 경우에 대한 예외처리
        if list1==None :
                return list2
        elif list2==None :
                return list1
        
        # (1) 일반적인 경우
        if list1.val>=list2.val:
            list2.next = self.mergeTwoLists(list2.next,list1)
            return list2
        else:
            list1.next = self.mergeTwoLists(list1.next,list2)
            return list1

헐,, base case 쪽에 if 로 두개 나열되어있던걸 if와 elif로 나누니까 갑자기 속도가 상위 9퍼가 됐어,,

 

댓글