给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-two-numbers
JavaScript
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} l1
* @param {ListNode} l2
* @return {ListNode}
*/
var addTwoNumbers = function(l1, l2) {
var root = new ListNode(0);
var l3 = root;
var carry = 0;
while( l1 || l2 || carry ){
var a = l1 == null ? 0 : l1.val;
var b = l2 == null ? 0 : l2.val;
var c = a + b + carry;
if(c > 9){
l3.next = new ListNode(c%10);
carry = 1;
}else{
l3.next = new ListNode(c);
carry = 0;
}
l3 = l3.next;
if(l1 != null){
l1 = l1.next;
}
if(l2 != null){
l2 = l2.next;
}
}
return root.next;
};
如果代码中,carry的值 通过 carry = c/10 来得到,则会因为精度问题不通过。
关于精度问题,可参考:
JavaScript 浮点数陷阱及解法
https://github.com/camsong/blog/issues/9