[Easy] 21. Merge Two Sorted Lists

문제

You are given the heads of two sorted linked lists list1 and list2.

Merge the two lists in a 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.

 

예시

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]

 

제약 조건

Constraints:

  • The number of nodes in both lists is in the range [0, 50].
  • -100 <= Node.val <= 100
  • Both list1 and list2 are sorted in non-decreasing order.

 

해결 과정

처음 아이디어는 mergeList = []; 를 생성하여 node를 넣고 return 하는 거였는데, mergeList의 Type이 ListNode가 아니라 TypeError가 떴다...

그래서 discuss를 몇 개 살펴보니 node를 반환해야하는 것을 깨닫고 코드를 다시 고쳤다.

 

  • 우선 새로운 mergeList의 head를 생성한다.
  • 값을 저장한 curr 변수에 head를 할당한다. (시작점)
  • list1이나 list2가 null이 될 때까지 while loop를 순회한다.
    • list1 < list2 일 때, curr.next를 list1로 지정하고 list1를 다음 순서로 옮긴다.
    • list2 < list1 일 때, curr.next를 list2로 지정하고 list2를 다음 순서로 옮긴다.
    • if문을 수행하고 나면 curr도 다음 순서로 옮긴다.
  • while문을 빠져나오면 list1이나 list2가 null인데, 둘 중 하나에 값이 남아있을 수 있으니 남은 node를 curr.next에 담는다.
  • 완성된 연결 리스트의 head.next를 반환한다.

 

해결 코드

/**
 * 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(list1, list2) {
    
    let head = new ListNode(0, null);
    let curr = head;
    
    while(list1 && list2){
        if(list1.val < list2.val){
            curr.next = list1;
            list1 = list1.next;
        }else{
            curr.next = list2;
            list2 = list2.next;
        }
        curr = curr.next;
    }
    
    curr.next = list1 || list2;
    
    return head.next;
    
};

'leetCode' 카테고리의 다른 글

[Medium] 46. Permutations  (0) 2022.05.19
[Medium] 77. Combinations  (0) 2022.05.19
[Easy] 206. Reverse Linked List  (2) 2022.05.18
[Medium] 542. 01 Matrix  (0) 2022.05.17
[Medium] 116. Populating Next Right Pointers in Each Node  (2) 2022.05.16