题目描述

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

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

示例 2: 输入:l1 = [], l2 = []
输出:[]

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

思路&js代码

1、迭代

var mergeTwoLists = function (list1, list2) {
    const head = new ListNode(-1)
    let result = head
 
    while (list1 || list2) {
        if (!list1) {
            result = result.next = list2
            list2 = list2.next
            break
        }
        if (!list2) {
            result = result.next = list1
            list1 = list1.next
            break
        }
        if (list1.val < list2.val) {
            result = result.next = list1
            list1 = list1.next
        } else {
            result = result.next = list2
            list2 = list2.next
        }
    }
 
 
    return head.next || null
};

2、递归

var mergeTwoLists = function(l1, l2) {
    if (l1 === null) {
        return l2;
    } else if (l2 === null) {
        return l1;
    } else if (l1.val < l2.val) {
        l1.next = mergeTwoLists(l1.next, l2);
        return l1;
    } else {
        l2.next = mergeTwoLists(l1, l2.next);
        return l2;
    }
};