2、两数相加 | JS-链表
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 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 /** 2 * Definition for singly-linked list. 3 * function ListNode(val, next) { 4 * this.val = (val===undefined ? 0 : val) 5 * this.next = (next===undefined ? null : next) 6 * } 7 */ 8 /** 9 * @param {ListNode} l1 10 * @param {ListNode} l2 11 * @return {ListNode} 12 */ 13 var addTwoNumbers = function(l1, l2) { 14 const l3 = new ListNode(0); //相当于两个数从个位开始相加,链表从左往右存储的就是个位、十位、百位... 15 let p1 = l1; 16 let p2 = l2; 17 let p3 = l3; 18 let carry = 0; //如果相加大于10了,十位上的数 19 while(p1 || p2){ 20 const v1 = p1 ? p1.val : 0; //如果两个链表一长一短,短的那个走完了就设为0 21 const v2 = p2 ? p2.val : 0; 22 const val = v1 + v2 + carry; //如果前两个数字相加大于10了,所进的哪一位 23 carry = Math.floor(val / 10); 24 p3.next = new ListNode(val % 10); 25 if(p1) p1 = p1.next; //链表后面如果还有值,就向后移动 26 if(p2) p2 = p2.next; 27 p3 = p3.next; 28 } 29 if(carry) { 30 p3.next = new ListNode(carry); //如果到最后遍历完链表了,carry值不为0,说明还需要向后进一位 31 } 32 return l3.next; //l3一开始存的是参数为0的头结点,后面才是需要返回的结果 33 };
本文作者:oaoa
本文链接:https://www.cnblogs.com/oaoa/p/14825355.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步