[LeetCode] 23. Merge k Sorted Lists

Chobby·2024년 8월 26일
1

LeetCode

목록 보기
60/194

ListNode를 병합하는 문제이다.

모든 노드를 한번에 병합하려 생각하면 어려우니

두 노드씩 묶어 병합하여 해결이 가능하다.

😎풀이

function mergeKLists(lists: Array<ListNode | null>): ListNode | null {
    // 빈 입력 처리
    if (lists.length === 0) return null;
    
    // 병합 함수 정의
    const merge = (l1: ListNode | null, l2: ListNode | null): ListNode | null => {
        // 더미 노드 생성
        const dummy = new ListNode(0);
        let current = dummy;
        
        // 두 리스트를 비교하며 병합
        while (l1 !== null && l2 !== null) {
            if (l1.val < l2.val) {
                current.next = l1;
                l1 = l1.next;
            } else {
                current.next = l2;
                l2 = l2.next;
            }
            current = current.next;
        }
        
        // 남은 노드 처리
        if (l1 !== null) current.next = l1;
        if (l2 !== null) current.next = l2;
        
        return dummy.next;
    }
    
    // 분할 정복 방식으로 리스트 병합
    while (lists.length > 1) {
        const mergedLists = [];
        
        // 두 개씩 리스트를 병합
        for (let i = 0; i < lists.length; i += 2) {
            const l1 = lists[i];
            const l2 = (i + 1 < lists.length) ? lists[i + 1] : null;
            mergedLists.push(merge(l1, l2));
        }
        
        // 병합된 리스트로 업데이트
        lists = mergedLists;
    }
    
    // 최종 병합된 리스트 반환
    return lists[0];
}
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글