題目說明
將兩個升序鏈表合併爲一個新的升序鏈表並返回。新鏈表是通過拼接給定的兩個鏈表的所有節點組成的。
示例:
輸入:1->2->4, 1->3->4
輸出:1->1->2->3->4->4
解題思路一
其實就是歸併排序的最後一步。合成兩個有序序列。只不過用遞歸的方式去遍歷鏈表。
- 遞歸,把min(t1,t2),加入新鏈。
- 若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)
}
}