剑指 Offer 25. 合并两个排序的链表

155 阅读1分钟

输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
示例1:

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

限制:
0 <= 链表长度 <= 1000

解法一:递归解法

思路
比较两个链表的值,小的返回,大的继续下一轮比较。

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

1.png

解法二: 迭代解法

思路
设置一个伪头节点,比较两个链表值的大小,确定cur的值,再确定cur.next的值。

var mergeTwoLists = function(l1, l2) {
    var dummyHead = new ListNode(-1);
    var cur = dummyHead;
    while(l1 && l2){
        if(l1.val <= l2.val){
            cur.next = l1;
            l1 = l1.next;
        }else{
            cur.next = l2;
            l2 = l2.next;
        }
        cur = cur.next;
    }
    if(l1 == null){
        cur.next = l2;
    }else{
        cur.next = l1;
    }
    return dummyHead.next;
};

2.png