JavaScript:leetcode_21. 合併兩個有序鏈表(遞歸歸併)

題目說明

將兩個升序鏈表合併爲一個新的升序鏈表並返回。新鏈表是通過拼接給定的兩個鏈表的所有節點組成的。 

示例:

輸入:1->2->4, 1->3->4
輸出:1->1->2->3->4->4

解題思路一

其實就是歸併排序的最後一步。合成兩個有序序列。只不過用遞歸的方式去遍歷鏈表。

  1. 遞歸,把min(t1,t2),加入新鏈。
  2. 若t1小,迭代t1 = t1.next,進入下一輪。

代碼實現一

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode} l1
 * @param {ListNode} l2
 * @return {ListNode}
 */
var mergeTwoLists = function(l1, l2) {
    let res = new ListNode(0);
    if (l1 && l2) {
        mergeL(l1,l2,res)
    } else {
        return l1 || l2
    }
    return res
};

function mergeL(l1, l2, res) {
    if (l1.val <= l2.val) {
        res.next = l1
        res.next.next = l2
    } else {
        res.next = l2
        res.next.next = l1
    }
    if (l1.next && l2.next) {
        mergeL(l1.next, l2.next, res.next.next)
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章