JavaScript LeetCode 21. Merge Two Sorted Lists

紀錄 LeetCode 21. Merge Two Sorted Lists 解題過程與思路

JavaScript LeetCode 21. Merge Two Sorted Lists
Photo by Glenn Carstens-Peters / Unsplash

其實我一直很不會這種 ListNode 的題目,卡了很久還是決定看一下提示該怎麼寫,不然連起頭都沒辦法,有種感覺可以用遞迴處理,不過要寫清楚跳出點不然會無限迴圈

/**
 * 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) {
  if (!list1) {
    return list2;
  }
  if (!list2) {
    return list1;
  }

  if (list1.val < list2.val) {
    list1.next = mergeTwoLists(list1.next, list2);
    return list1;
  } else {
    list2.next = mergeTwoLists(list1, list2.next);
    return list2;
  }
};

看了下整個思考邏輯就會是:

  • 檢查兩個 list 是否為空,如果是的話就 return 另一個 list,因為原本的 list 已經排序好了
  • 比較兩個 list 的 val 比較小的就往下走,然後再丟進遞回裡面繼續比較