一、题目 给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字(0-9)。 请你将两个数相加,并以相同形式返回一个表示
给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字(0-9)。
请你将两个数相加,并以相同形式返回一个表示和的链表。
二、思路1.生成一个虚拟dummy头节点
2.链表中节点的值:sum%10
3.进位标志flag:sum/10
三、程序实现var addTwoNumbers = function(l1, l2) {
let flag=0 //标志位
let dummy=new ListNode();//创建一个虚拟头节点
//遍历指针
let curr=dummy
//循环遍历
while(l1!==null || l2!==null){
let sum=0;
let a=0,b=0
if(l1!==null){
a=l1.val; //记录l1当前节点的值
l1=l1.next;
}
if(l2!==null){
b=l2.val //记录l2当前节点的值
l2=l2.next
}
sum=a+b+flag; //计算两数之和
curr.next=new ListNode(sum%10); //直接创建节点然后赋值
flag=Math.floor(sum/10);
//指针进1
curr=curr.next
}
//如果最后的节点元素相加还需要进位,生成一个新节点且值为flag
if(flag>0){
curr.next=new ListNode(flag);
}
return dummy.next
};