Skip to content

[Leetcode] 21. Merge Two Sorted Lists โ€‹

Problem โ€‹

๋ฌธ์ œ ๋งํฌ

๋‘ ์ˆซ์ž๋กœ ์ด๋ค„์ง„ ๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๋จธ์ง€ํ•˜๋ผ.

Solution โ€‹

  1. list1๊ณผ list2 ์ค‘์—์„œ ๊ฐ’์ด ์ž‘์€ ๋…ธ๋“œ๋ฅผ head ๋…ธ๋“œ๊ฐ€ ๊ฐ€๋ฅดํ‚ค๊ฒŒํ•œ๋‹ค.
  2. ์ž‘์€ ๋…ธ๋“œ๋กœ ์„ ์ •๋œ ๋…ธ๋“œ๋Š” ๋‹ค์Œ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฅดํ‚ค๋„๋กํ•œ๋‹ค.
  3. ๊ทธ๋ ‡๊ฒŒ ๋‘ list ๋…ธ๋“œ๊ฐ€ null์„ ๊ฐ€๋ฅดํ‚ฌ๋•Œ๊นŒ์ง€ head์— ์ด์–ด๋ถ™์–ด๋‚˜๊ฐ„๋‹ค.

JS CODE โ€‹

javascript
/**
 * 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) {
  const head = new ListNode()

  let node = {
    l1: list1,
    l2: list2,
    rear: head,
  }

  const getValMvNode = (node, keyStr) => {
    const { val, next } = node[keyStr]
    node[keyStr] = next
    return val
  }

  while (node.l1 || node.l2) {
    let curNodeVal = null
    if (node.l1 && node.l2) {
      curNodeVal = node.l1.val < node.l2.val ? getValMvNode(node, 'l1') : getValMvNode(node, 'l2')
    } else if (node.l1) curNodeVal = getValMvNode(node, 'l1')
    else if (node.l2) curNodeVal = getValMvNode(node, 'l2')

    // console.log(l1, l2)

    node.rear.next = new ListNode(curNodeVal)
    node.rear = node.rear.next
  }

  return head.next
}