두 연결리스트가 있을 때 하나의 연결리스트로 병합하는 문제이다.
병합은 오름차순으로 이루어져야 한다.
반복문을 돌며 list1의 node 값과 list2 노드의 값을 비교해서 새로운 연결리스트에 오름차순 순으로 추가하면 될 것 같다.
연결리스트는 리스트 처럼 push, pop이 아닌 node의 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]:
# 병합할 연결리스트의 맨 앞 노드의 이전 노드: head
# head로 초기화 해주고 current에 할당해서 current.next를 계속 붙여서 이어나갈 예정
# 연결리스트 풀이시 일반적으로 사용하는 코딩기법
head = ListNode(None)
# 새롭게 만들어질 연결리스트 맨 앞 노드의 이전이라고 생각하면 됨
current = head
# list1, list2 자체가 포인터가 되어 둘 다 None이 아닐 때까지 반복
# 즉 list1, list2 마지막까지 반복문 돌리겠다는 의미
while list1 and list2:
if list1.val < list2.val:
current.next = list1
list1 = list1.next
else:
current.next = list2
list2 = list2.next
current = current.next
# 둘 중 하나가 다음 값이 없을 때 처리: 새로운 연결리스트의 나머지 부분 그냥 연결
current.next = list1 or list2
print(head)
return head.next
⬆️
# list1
# 1 -> 2 -> 5 -> N
# ⬆️
# list2
# 3 -> 4 -> 5 -> N
# ⬆️
# 병합 리스트: 1 -> 2 -> 3 -> 4 -> 5 -> 5 -> N