携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第3天,点击查看活动详情
😊 大家好,我是思淼MJ。
随着“后浪拍前浪”,于是我被拍到了沙滩上,一直在努力寻找自己的发展方向。都说:做事情规划固然重要,但行动更重要。于是就给自己订了个小目标,这就是这次挑战的由来,看看自己能坚持多久。欢迎小伙伴们,和我一起挑战打卡😊。
题目:两数相加
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
解题思路:
-
同时遍历两个链表;
-
如果有个节点为null,则将其赋值为0;
-
加一个标识符,默认为0,如果有进位的数字,则将进位值加到标识符;
-
每次的数除与10,取余得到该位数;取整得到进位数;
-
合并两个队列;
var addTwoNumbers = function(l1, l2) { let head = null, tail = null; let carry = 0; while (l1 || l2) { const n1 = l1 ? l1.val : 0; const n2 = l2 ? l2.val : 0; const sum = n1 + n2 + carry; if (!head) { head = tail = new ListNode(sum % 10); } else { tail.next = new ListNode(sum % 10); tail = tail.next; } carry = Math.floor(sum / 10); if (l1) { l1 = l1.next; } if (l2) { l2 = l2.next; } } if (carry > 0) { tail.next = new ListNode(carry); } return head; };