LeetCode算法學習之--數組--合併兩個有序鏈表

這是我參與8月更文挑戰的第1天,活動詳情查看:8月更文挑戰javascript

你們好今天給你們分享下一道 LeetCode 簡單難度 的題目[合併兩個有序鏈表]前端

這裏主要是分享思路和註釋,供你們更好的理解題目解法,代碼部分是參考LeetCode 轉寫成javascript 代碼,java

題目

將兩個升序鏈表合併爲一個新的 升序 鏈表並返回。新鏈表是經過拼接給定的兩個鏈表的全部節點組成的。算法

![圖片轉載leetCode]imgmarkdown

示例1
輸入:l1 = [1,2,4], l2 = [1,3,4]
輸出:[1,1,2,3,4,4]
示例 2:

輸入:l1 = [], l2 = []
輸出:[]
示例 3:

輸入:l1 = [], l2 = [0]
輸出:[0]

複製代碼

分析

分析網絡

1.2個升序鏈表合併爲一個升序鏈表app

2.合併到鏈表=》改變節點的指向ide

解法oop

1.迭代post

2.遞歸

解法一:迭代

思路
1.定義一個dummy節點,爲主軸
2.迭代2個鏈表,比較大小
3.小的先放入主軸中
4.餘下的未迭代完的鏈表須要繼續進行配置
*/
var mergeTwoLists = function (l1, l2) {
  // 設置的一個dummy爲主軸
  const dummy = new ListNode(0);

  let cur = dummy;
  // 同時迭代l1 l2
  while (l1 && l2) {
    // 由於是升序因此 若是l1.val<l2.val 就把l1放入主軸中
    if (l1.val <= l2.val) {
      cur.next = l1;
      l1 = l1.next;
      // 反之也是
    } else {
      cur.next = l2;
      l2 = l2.next;
    }
    // 移動cur到下一個位置待命
    cur = cur.next;
  }

  //若是l1還有值說明 l1尚未迭代完成把全部l1放入主線程中
  while (l1) {
    cur.next = l1;
    cur = cur.next;
    l1 = l1.next;
  }
  //若是l2還有值說明 l2尚未迭代完成把全部l2放入主線程中
  while (l2) {
    cur.next = l2;
    cur = cur.next;
    l2 = l2.next;
  }

  // 返回主線程的第一個節點
  return dummy.next;
};

/* 複雜度 時間 O(n1+n2) n1爲li的長度 n2爲l2的長度 空間 O(1) */
複製代碼

解法二:遞歸

思路
1.終止條件 l1或者l2爲null的時候返回
2.遞歸每一層就作比較和合並
*/

var mergeTwoLists = function (l1, l2) {
  const cur = new ListNode(0);

  function mergeTwoListsRecursive(l1, l2, cur) {
      //若是l1還有值說明 l1尚未迭代完成把全部l1放入主線程中
    if (!l1) {
      while (l2) {
        cur.next = l2;
        l2 = l2.next;
        cur = cur.next;
      }
      return;
    }
    //若是l2還有值說明 l2尚未迭代完成把全部l2放入主線程中
    if (!l2) {
      while (l1) {
        cur.next = l1;
        l1 = l1.next;
        cur = cur.next;
      }
      return;
    }

    // 比較大小 小的先放入主軸
    if (l1.val <= l2.val) {
      cur.next = l1;
      l1 = l1.next;
    } else {
      cur.next = l2;
      l2 = l2.next;
    }
    cur = cur.next;
    mergeTwoListsRecursive(l1, l2, cur);
  }

  mergeTwoListsRecursive(l1, l2, cur);

  return cur.next;
};

/* 複雜度 時間 O(n1+n2) n1爲li的長度 n2爲l2的長度 空間 O(1) */
複製代碼

總結

這道題考察對鏈表升序組合的理解,小的放前面

你們能夠看看我分享的一個專欄(前端搞算法)裏面有更多關於算法的題目的分享,但願可以幫到你們,我會盡可能保持天天晚上更新,若是喜歡的麻煩幫我點個贊,十分感謝

文章內容目的在於學習討論與分享學習算法過程當中的心得體會,文中部分素材來源網絡,若有侵權,請聯繫刪除,郵箱 182450609@qq.com

相關文章
相關標籤/搜索