给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} l1
* @param {ListNode} l2
* @return {ListNode}
*/
var addTwoNumbers = function(l1, l2) {
let u = 0,//定义变量 两变量和是否大于10;
l3 = new ListNode(0),
p1 = l1,
p2 = l2,
p3 = l3; //定义指针,确定当前链表节点数据
while(p1 || p2){
//求出当前节点的数据和,有且仅当当前节点包含有效数据,否则节点默认为0
let sum =((p1 && p1.val) || 0) + ((p2 && p2.val) || 0) + u;
// 重制标记
u = 0;
//求出当前节点数据,大于10做标记
if(sum >= 10){
sum %= 10;
u = 1;
}
p3.next = new ListNode(sum);
// 当前l1,l2数据节点有效时,指针位置后移
p1 && (p1 = p1.next);
p2 && (p2 = p2.next);
// l3指针节点后移,创建新节点数据
p3 = p3.next
}
u && (p3.next = new ListNode(u));
//l3第一个节点默认为0,取第二个节点后数据
return l3.next;
};
时间复杂度O
空间复杂度O
//方法二
参考1: 力扣,两数相加,js解法.
参考2: LeetCode2.两数相加 JavaScript
.