오늘 문제 예제는 다음과 같다. 정렬된 리스트 2개가 주어질 때, 이를 병합한 리스트 반환하는 문제이다.
두 리스트를 left, right로 선언하고 반환할 새로운 리스트를 가리키는 노드를 head라고 선언한다.
left와 right가 모두 존재하는 동안(null 또는 None)이 아닌 동안에 left와 right의 값을 비교해 left의 값이 right의 값보다 작거나 같다면 head.next에 ListNode(left.val)을 지정하고, 그 밖의 경우에는 ListNode(right.val)을 지정한다.
left 또는 right가 null 또는 None인 경우에는 head.next에 None이 아닌 right 또는 left를 지정하면 병합 과정을 마칠 수 있다.
# 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, l1: ListNode, l2: ListNode) -> ListNode:
left = l1
right = l2
head = ListNode()
ret = head
while left and right:
if left.val <= right.val:
head.next = ListNode(left.val)
left = left.next
else:
head.next = ListNode(right.val)
right = right.next
head = head.next
if not left:
head.next = right
if not right:
head.next = left
return ret.next