合并两个有序链表
- 非递归
var mergeTwoLists = function (l1, l2) {
// 虚拟头节点
let dummy = new ListNode(-1);
let p = dummy;
// 两个链表都有值的情况
while (l1 != null && l2 != null) {
// 比较 l1 和 l2 两个指针,将值较小的的节点接到 p 指针
if (l1.val < l2.val) {
p.next = l1;
l1 = l1.next;
} else {
p.next = l2;
l2 = l2.next;
}
// p 指针不断前进
p = p.next;
}
p.next = l1 == null ? l2 : l1;
return dummy.next;
};
2.递归法
var mergeTwoLists = function (l1, l2) {
//递归的结束条件,如果l1和l2中有一个为空就返回
if (l1 == null || l2 == null) {
return l1 == null ? l2 : l1;
}
//如果l1的值<=l2的值,就继续递归,比较l1.next的值和l2的值
if (l1.val <= l2.val) {
//l1.next和l2比较完后,会产生一个更小的节点x,将x加到当前l1的后面
l1.next = mergeTwoLists(l1.next, l2);
return l1;
} else {
//如果l1的值>l2的值,就继续递归,比较l1的值和l2.next的值
l2.next = mergeTwoLists(l1, l2.next);
return l2;
}
};