【LeetCode Hot100】2.两数相加

【LeetCode Hot100】2.两数相加
题目描述给你两个 非空 的链表表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的并且每个节点只能存储 一位 数字。请你将两个数相加并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外这两个数都不会以 0 开头。示例 1输入l1 [2,4,3], l2 [5,6,4]输出[7,0,8]解释342 465 807.示例 2输入l1 [0], l2 [0]输出[0]示例 3输入l1 [9,9,9,9,9,9,9], l2 [9,9,9,9]输出[8,9,9,9,0,0,0,1]提示每个链表中的节点数在范围 [1, 100] 内0 Node.val 9题目数据保证列表表示的数字不含前导零解题思路1.遍历链表1和链表2result v1 v2 l3.val,当前位数的结果包含链表1的数和链表2的数以及前面进位的1取个位数2.注意链表长短不一的情况空节点则取03注意创建第三个链表的时候将头结点记录下来同时next的创建新节点4.注意最后一位的处理AC代码varaddTwoNumbersfunction(l1,l2){functionNode(val0,nextnull){this.valval;this.nextnext;}letl3newNode()letstartl3while(l1||l2){// 修复null.val报错空节点取0constv1l1?l1.val:0constv2l2?l2.val:0constresultv1v2l3.valif(result10){l3.valresult%10l3.nextnewNode()l3l3.next l3.val1}else{l3.valresult l3.nextnewNode()l3l3.next}// 修复null.next报错只有非空才后移if(l1)l1l1.nextif(l2)l2l2.next}// 循环结束后如果当前l3存了进位1保留如果是0需要清理尾部// 清理末尾连续的0节点letpstart;while(p.next){// 如果下一个节点是最后一个且val为0截断if(p.next.nextnullp.next.val0){p.nextnull;}else{pp.next;}}p.nextnullreturnstart};

最新新闻

日新闻

周新闻

月新闻