You are given the heads of two sorted linked lists list1
and list2
.
Merge the two lists into one sorted list. The list should be made by splicing together the nodes of the first two lists.
Return the head of the merged linked list.
[0, 50]
.-100 <= Node.val <= 100
list1
and list2
are sorted in non-decreasing order.# 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]:
두 정수 링크드리스트 list1
, list2
의 헤더가 주어지고 두 리스트의 원소를 오름차순 정렬하여 합치면서 새로운 링크드리스트를 만들어 헤더를 반환하는 문제입니다.
제가 생각한 코드는 다음과 같습니다.
# 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]:
if list1 == None and list2 == None:
return None
new_node = ListNode()
node = new_node
while list1 != None or list2 != None:
node = node.next if node.next != None else node
val1 = list1.val if list1!=None else 101
val2 = list2.val if list2!=None else 101
if val1 < val2 :
node.val = val1
list1 = list1.next if list1 != None else None
else:
node.val = val2
list2 = list2.next if list2 != None else None
node.next = ListNode()
node.next = None
return new_node
new_node
를 정의하고 헤더는 따로두고 사용을 위해 node
를 따로 선언합니다.while문
으로 반복합니다.node
로 가지고옵니다. 맨 처음엔 다음 노드가 없으므로 조건문을 통해 예외처리를 합니다.node
의 다음 노드를 미리 생성해줍니다. 헤더 노드를 받은 채로 들어오기 때문에 새로운 반복문이 시작하기 전에 미리 선언하여 반복문의 흐름이 일치하게 만듭니다.None
으로 초기화합니다.이전 문제에서 알고리즘보다 마지막에 남는 불필요한 노드를 어떻게 제거할지 생각하는데 더 신경을 많이 썼다고 했었는데.. 덕분에 이번 문제는 비교적 쉽게 지나갔던것 같습니다.
이 문제 역시 링크드리스트의 개념과 클래스의 기본만 안다면 알고리즘 자체는 구현이 어렵지 않은 문제였습니다.