给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} l1
* @param {ListNode} l2
* @return {ListNode}
*/
function ListNode(val) {
this.val = val;
this.next = null;
}
// 解1
var addTwoNumbers = function (l1, l2) {
function listNodetoNumArr(listNode) {
var arr = [];
function checknext(item) {
arr.push(item.val);
if (item.next) {
item = item.next;
checknext(item);
}
}
checknext(listNode);
return arr;
}
let left = listNodetoNumArr(l1);
let right = listNodetoNumArr(l2);
let mapList = left.length > right.length ? left : right;
let resultList = [];
for (var i = 0; i < mapList.length; i++) {
let num = parseInt(left[i] || 0) + parseInt(right[i] || 0);
if (num > 9) {
num -= 10;
mapList[i + 1] = (mapList[i + 1] || 0) + 1;
}
resultList.push(num);
}
var resultLegth = mapList.length;
resultList = resultList.reverse();
console.log(resultList);
function format() {
var r = new ListNode(resultList[resultLegth - 1]);
r.next = null;
if (resultLegth > 1) {
resultLegth--;
r.next = format();
}
return r;
}
var resultListNode = format();
return resultListNode;
};
// 解2
var addTwoNumbers = function (l1, l2) {
var result;
let num = (l1.val || 0) + (l2.val || 0);
if (num > 9) {
num -= 10;
if (l1.next) {
l1.next.val += 1;
} else if (l2.next) {
l2.next.val += 1;
} else {
l1.next = new ListNode(1)
}
}
result = new ListNode(num);
if (l1.next || l2.next) {
result.next = addTwoNumbers(l1.next || {}, l2.next || {});
}
return result;
};