输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
示例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
}
};
解法二: 迭代解法
思路
设置一个伪头节点,比较两个链表值的大小,确定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;
};