문제

→ 두 연결 리스트를 정렬하여 합치기

→ 예시

Untitled

Input: list1 = [1,2,4], list2 = [1,3,4]
Output: [1,1,2,3,4,4]

접근방법

→ 리스트화 - 리스트 합치기 - sort - 연결리스트 변환

Untitled

전체 코드

# Definition for singly-linked list.
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

class LinkedList:
    def __init__(self):
        self.head = None

    def append(self, val):
        if not self.head:
            self.head = ListNode(val, None)
            return

        node = self.head
        while node.next:
            node = node.next

        node.next = ListNode(val, None)

class Solution:
    def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:
        a# 배열 생성
        arr = []

        # 연결리스트 -> 리스트화
        # 첫번째 연결리스트 arr에 넣기
        node1 = head1
        while node1:
            arr.append(node1.val)
            node1 = node1.next

        # 두번째 연결리스트 arr 에 넣기
        node2 = head2
        while node2:
            arr.append(node2.val)
            node2 = node2.next

        # 리스트 오름차순 정렬
        arr.sort()

        # 최종 결과 연결리스트 생성
        result_li = LinkedList()
        # 연결리스트에 하나씩 넣기
        for num in arr:
            result_li.append(num)

        return result_li.head

결과

통과는 했는데 알고리즘이 너무 원시적인것 같다.

연결리스트를 리스트화 했다가 리스트를 다시 연결리스트화 하는것은 연결리스트의 삭제 수정이 용이한 장점을 파고들지 못한것 같다.

Untitled

풀이

변수를 스왑해가면서 값들을 엮어나간다.