题目:
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
思路:
- 类似归并排序中的合并过程
- 创建一个新链表
- head 存储所有合并数据
- cur作为一个tmp存储,分析cur=head的作用
const a = {val: 1};
let t = a;
t.next = {val: 2};
t = t.next;
t.next = {val: 3};
// 结果
a = {
val: 1,
next: {
val: 2,
next: {
val: 3
}
}
}
// 结论:
cur一直在给head作累加
- 比较l1,l2的val大小
- cur.next = l1 -> 移动当前cur.next
- cur = cur.next -> 下移动cur
- l1 = l1.next -> 移动l1
代码
function ListNode(val) {
this.val = val;
this.next = null;
}
var mergeTwoLists = function (l1, l2) {
const head = new ListNode(0);
let cur = head;
while (l1 !== null && l2 !== null) {
if (l1.val < l2.val) {
cur.next = l1;
cur = cur.next;
l1 = l1.next;
} else {
cur.next = l2;
cur = cur.next;
l2 = l2.next;
}
}
if (l1 === null) {
cur.next = l2;
} else {
cur.next = l1;
}
// 去表头
return head.next;
};