본문 바로가기
Computer Science/코딩테스트

LeetCode #21 Merge Two Sorted Lists

문제

두 개의 정렬된 연결 목록 list1과 list2의 헤드가 제공됩니다.

두 개의 목록을 하나의 정렬된 목록으로 병합합니다. 목록은 처음 두 목록의 노드를 연결하여 만들어야 합니다.

병합된 연결 목록의 헤드를 반환합니다.

 

Example 1:

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

Example 2:

Input: list1 = [], list2 = []
Output: []

Example 3:

Input: list1 = [], list2 = [0]
Output: [0]

 

제출코드

/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} list1
 * @param {ListNode} list2
 * @return {ListNode}
 */
var mergeTwoLists = function (l1, l2) {
    let newList = new ListNode(0);
    let headOfNewList = newList;

    while (l1 != null && l2 != null) {
        if (l1.val < l2.val) {
            newList.next = l1;
            l1 = l1.next;
        } else {
            newList.next = l2;
            l2 = l2.next;
        }
        newList = newList.next;
    }
    if (l1 == null) {
        newList.next = l2;
    }
    else {
        newList.next = l1;
    }

    return headOfNewList.next;
};

문제풀이

이번 문제는 직접 풀지 못하였다. 스터디 조원들과 정보를 공유하고 다른분들이 작성한 코드를 해석해보았다.

LinkedList에 노드가 포함되어 있는 동안 실행되며 각 반복에서 사용 가능한 두 노드를 비교하고 더 낮은 노드를 선택하고 마지막으로 해당 LinkedList를 다음 항목으로 이동,루프가 끊어지면 LinkedList가 비어 있지 않은 나머지 요소가 새 LinkedList의 끝에 추가된다.

 

해당문제는 작성된 코드를 보며 이해를 하는대는 큰 어려움이 있지는 않았다. 하지만 아무것도 없는상태에서 해당 코드를 작성하는 것은 아직 나에겐 힘들다. 해당부분에 집중적 공부가 더 필요하다.