【题目】 合并两个有序链表
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
示例
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
解题
由于两个链表都是有序,可以使用双指针,交替判断,遍历两个链表,直到其中一个链表遍历完。

过程如上图所示,到第4步之后,两个链表就比较完了。
虚头结点+遍历
var mergeTwoLists = function(l1, l2) {
if (!l1) {
return l2
}
if (!l2) {
return l1;
}
let cur = new ListNode(null), res = cur;
while(true) {
if (l1.val > l2.val) {
cur.next = l2;
l2 = l2.next;
} else {
cur.next = l1;
l1 = l1.next;
}
cur = cur.next;
if (!l1) {
cur.next = l2;
break;
} else if (!l2) {
cur.next = l1;
break;
}
}
return res.next;
};
递归
思路和上面是一样的,每次都是判断两个结点值的大小,只是上面需要新增一个头部结点,
采用递归时直接以头部结点数值小的那个结点作为头部结点。
var mergeTwoLists = function(l1, l2) {
if (!l1) {
return l2
}
if (!l2) {
return l1;
}
if (l1.val > l2.val) {
l2.next = mergeTwoLists(l1, l2.next);
return l2;
} else {
l1.next = mergeTwoLists(l1.next, l2);
return l1;
}
};