LeetCode/NeetCode
21. Merge Two Sorted Lists
hyunkookim
2024. 12. 7. 17:10
# 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]:
dummy = ListNode()
res = dummy
while list1 and list2:
v1 = list1.val
v2 = list2.val
if v1 < v2:
res.next = ListNode(v1)
res = res.next
list1 = list1.next
else: # v1 >= v2:
res.next = ListNode(v2)
res = res.next
list2 = list2.next
remain = list1 if list1 else list2
# while remain:
# res.next = ListNode(remain.val)
# res = res.next
# remain = remain.next
res.next = remain # 위 while 문을 한줄로..
return dummy.next
최종 코드
# 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]:
dummy = node = ListNode()
while list1 and list2:
if list1.val < list2.val:
node.next = list1
list1 = list1.next
else:
node.next = list2
list2 = list2.next
node = node.next
# if list1 is None:
# node.next = list2
# if list2 is None:
# node.next = list1
node.next = list1 or list2
return dummy.next
Time & Space Complexity
- Time complexity: O(n+m)
- Space complexity: O(1)
Where n is the length of list1 and m is the length of list2.