DOJO004

  • Dashool 創辦人
  • 喜歡調酒
  • Rails、Nextjs、TypeScript

來刷 LeetCode 吧! 12 21.Merge Two Sorted Lists

LeetCode

題目分析 

  • 給兩個已排序的 linked lists list1 、list2 。
  • 將兩個 linked list 合併,並且一樣要排序好。

第一直覺

 
var mergeTwoLists = function (list1, list2) {
  let dummy = new ListNode(); // 宣告 dummy 方便最後回傳
  let tail = dummy; // 將 tail 指向 dummy,用來串接新鏈表
  while (list1 && list2) {
    if (list1.val < list2.val) {
      tail.next = list1; // 較小的節點接到 tail 後面
      list1 = list1.next; // 移至下一個節點
    } else {
      tail.next = list2;
      list2 = list2.next;
    }
    tail = tail.next; // 將 tail 指向最後一個節點
  }
  tail.next = list1 || list2; // 將剩餘節點連接到尾端
  return dummy.next; // 回傳 dummy.next 也就是 tail 的頭節點
};

優化寫法

 
  • 使用遞規的方式處理

var mergeTwoLists = function(list1, list2) {
    if (!list1) return list2;  // 如果 list1 為空,直接返回 list2
    if (!list2) return list1;  // 如果 list2 為空,直接返回 list1
    
    // 選擇較小的節點作為新鏈表的頭節點
    if (list1.val < list2.val) {
        list1.next = mergeTwoLists(list1.next, list2);  // 遞歸合併剩餘的節點
        return list1;
    } else {
        list2.next = mergeTwoLists(list1, list2.next);  // 遞歸合併剩餘的節點
        return list2;
    }
};

版權所有 © 2023 DOJO004

Deployed on Zeabur