๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ฝ”ํ…Œ

[์ž๋ฃŒ๊ตฌ์กฐ] Linked list : Leetcode - 21. Merge Two Sorted Lists

๐Ÿค” ๋ฌธ์ œ ์ดํ•ด

๋‘๊ฐœ์˜ ์ •๋ ฌ๋œ ๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ๋ฅผ ํ•˜๋‚˜์˜ ์ •๋ ฌ๋œ ๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ๋กœ ๋งŒ๋“ค์–ด๋ผ

https://leetcode.com/problems/merge-two-sorted-lists/

 

๐Ÿค” EX

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

data example 2
Input: list1 = [], list2 = []
Output: []

data 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(list1, list2) {
    let answer = new ListNode(0) ์ƒˆ๋กœ์šด ๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ ์„ ์–ธ
    let current = answer ํ˜„์žฌ ๋…ธ๋“œ์˜ ํฌ์ธํ„ฐ
  
    while(list1 && list2){
         let list1Num = list1 ? list1.val : Infinity;
        let list2Num = list2 ? list2.val : Infinity;

        if(list1Num<list2Num){
			๋…ธ๋“œ์— list1Num์ €์žฅ ํ›„
             if(list1) list1 = list1.next ๋‹ค์Œ๊ฐ’์œผ๋กœ ๋„˜๊น€
        }else if(list1Num == list2Num){
				๋…ธ๋“œ์— list1Num์ €์žฅ ํ›„
             if(list1) list1 = list1.next ๋‹ค์Œ๊ฐ’์œผ๋กœ ๋„˜๊น€
			๋…ธ๋“œ์— list2Num์ €์žฅ ํ›„
             if(list2) list2 = list2.next ๋‹ค์Œ๊ฐ’์œผ๋กœ ๋„˜๊น€
        }
        else{
            ๋…ธ๋“œ์— list1Num์ €์žฅ ํ›„
            if(list2)  list2 = list2.next ๋‹ค์Œ๊ฐ’์œผ๋กœ ๋„˜๊น€
            }
    }
     if (list1) {
          list1์ด ๋‚จ์€ ๊ฒฝ์šฐ, ๋‚˜๋จธ์ง€๋ฅผ ์ถ”๊ฐ€
    }

    if (list2) {
 		 list2๊ฐ€ ๋‚จ์€ ๊ฒฝ์šฐ, ๋‚˜๋จธ์ง€๋ฅผ ์ถ”๊ฐ€
    }
    return answer.next
};


๐Ÿค” ํ•ด๊ฒฐํ•œ ์ฝ”๋“œ

var mergeTwoLists = function(list1, list2) {
    let answer = new ListNode(0)
    let current = answer
  
    while(list1 && list2){
         let list1Num = list1 ? list1.val : Infinity;
        let list2Num = list2 ? list2.val : Infinity;

        if(list1Num<list2Num){
            current.next = new ListNode(list1Num)
            current = current.next
           if(list1) list1 = list1.next

        }else if(list1Num == list2Num){

            current.next = new ListNode(list1Num)
            current = current.next
           if(list1) list1 = list1.next
           current.next = new ListNode(list2Num)
            current = current.next
           if(list2) list2 = list2.next

        }
        else{
            current.next = new ListNode(list2Num)
            current = current.next
            if(list2)  list2 = list2.next
            }
    }
     if (list1) {
        current.next = list1; // list1์ด ๋‚จ์€ ๊ฒฝ์šฐ, ๋‚˜๋จธ์ง€๋ฅผ ์ถ”๊ฐ€
    }

    if (list2) {
        current.next = list2; // list2๊ฐ€ ๋‚จ์€ ๊ฒฝ์šฐ, ๋‚˜๋จธ์ง€๋ฅผ ์ถ”๊ฐ€
    }
    return answer.next
};


๐Ÿค” ๋‹ค๋ฅธ ํ’€์ด๋ฐฉ๋ฒ•

var mergeTwoLists = function (l1, l2) {
    if (!l1) return l2;
    else if (!l2) return l1;
    else if (l1.val <= l2.val) {
        l1.next = mergeTwoLists(l1.next, l2);
        return l1;
    } else {
        l2.next = mergeTwoLists(l1, l2.next);
        return l2
    }
};

๋„ˆ๋ฌด ๊ฐ„๋‹จํ•˜๊ฒŒ ํ’€์–ด๋‚ด์„œ ๋†€๋ž๋‹ค....

์ฝ”๋“œ ํ•ด์„ 

l1์˜ ๊ฐ’์ด l2์˜ ๊ฐ’๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ๊ฒฝ์šฐ, l1์˜ ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ l1.next๋กœ ์„ค์ •ํ•˜๊ณ , l1.next์™€ l2๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ๋ณ‘ํ•ฉํ•œ ๊ฒฐ๊ณผ๋ฅผ l1์˜ ๋‹ค์Œ ๋…ธ๋“œ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  l1์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ž‘์€ ๊ฐ’์„ ๊ฐ€์ง„ ๋…ธ๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ณ‘ํ•ฉํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

l1์˜ ๊ฐ’์ด l2์˜ ๊ฐ’๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ, l2์˜ ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ l2.next๋กœ ์„ค์ •ํ•˜๊ณ , l1๊ณผ l2.next๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ๋ณ‘ํ•ฉํ•œ ๊ฒฐ๊ณผ๋ฅผ l2์˜ ๋‹ค์Œ ๋…ธ๋“œ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  l2๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ž‘์€ ๊ฐ’์„ ๊ฐ€์ง„ ๋…ธ๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ณ‘ํ•ฉํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.