💛题目描述:给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
💖解决思路:
这道题需要返回一个新的链表;创建新节点,给它指定next 就把多个节点连接起来了 。
两个节点相加时还需要考虑进位,
代码注释中写清楚了整个流程
💞代码实现:
function addTwoNumbers(l1,l2){
const dummy = new ListNode(-1); //创建哨兵节点
let head = dummy; //定义一个head指针,方便移动,为什么不移动dummy?因为最后返回链表时需要用dummmy,所以它不能动
let flag = 0; //进位标志
while(l1||l2){
const x = l1?l1.val:0; //考虑两个链表长度不同,l1遍历结束后,后面的节点置0
const y = l2?l2.val:0;
let sum = x+y+flag;
head.next = new ListNode(sum%10) //创建一个新的节点,值是相加和的个位
flag = Math.floor(sum/10) //更新进位flag
head = head.next; //移动head指针,开始下一轮;
//移动l1 和 l2
if(l1) {l1 = l1.next} //如果l1还不为空,就移动
if(l2) {l2 = l2.next} //如果l2不为空,就下移
}
//最后考虑进位!!如果两个链表都遍历结束了,进位还不为0就需要创建一个新的结点存放
if(flag) {
head.next = new ListNode(flag)
}
return dummy.next
}