2. 两数相加
一、思想
二、代码实现
var addTwoNumbers = function(l1, l2) {
// 存放两数之和新的链表,定义它的头和尾
let head = null,tail = null;
// 定义进位carry
let carry = 0;
// 其中一个可能位数不够,注意进行补0操作
while(l1 || l2){
// 取出节点的数
const n1 = l1 ? l1.val : 0;
const n2 = l2 ? l2.val : 0;
// 计算和
let sum = n1+n2+carry;
// 将结果存到新的链表中
if(!head){
head = tail = new ListNode(sum%10); // 防止进位的产生,存入的是sum%10
}else{
tail.next = new ListNode(sum%10);
tail = tail.next;
}
// 注意进位的处理,向下取整
carry = Math.floor(sum/10);
// 移动指针,注意l1,l2可能为空
if(l1) l1=l1.next;
if(l2) l2=l2.next;
}
// 当所有位数结束,还存在进位的时候,也要处理
if(carry>0) tail.next = new ListNode(carry);
return head;
};