# 小结
略
# 合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
var mergeTwoLists = function(l1, l2) {
if (!l1) {
return l2;
}
if (!l2) {
return l1;
}
var p1 = l1;
var p2 = l2;
// 哨兵节点
var sentinel = { next: null };
var prev = sentinel;
while (p1 && p2) {
if (p1.val > p2.val) {
prev.next = p2;
prev = p2;
p2 = p2.next;
prev.next = null;
} else {
prev.next = p1;
prev = p1;
p1 = p1.next;
prev.next = null;
}
}
prev.next = p1 || p2;
return sentinel.next;
};
# 两数相加
给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0
之外,这两个数都不会以 0
开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
var addTwoNumbers = function(l1, l2) {
if (!l1) {
return l2;
}
if (!l2) {
return l1;
}
var newLink = { val: -1, next: null };
var curr = newLink;
var p1 = l1;
var p2 = l2;
var temp = 0;
while (p1 || p2) {
if (!p1) {
p1 = { val: 0, next: null };
}
if (!p2) {
p2 = { val: 0, next: null };
}
var currSum = p1.val + p2.val + temp;
temp = 0;
if (currSum > 9) {
currSum = currSum - 10;
temp = 1;
}
curr.next = {
val: currSum,
next: null
};
p1 = p1.next;
p2 = p2.next;
curr = curr.next;
}
if (temp) {
curr.next = {
val: 1,
next: null
};
temp = 0;
}
return newLink.next;
};
作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/linked-list/f217m/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。