写点什么

LeetCode 题解:2. 两数相加,迭代,JavaScript,详细注释

用户头像
Lee Chen
关注
发布于: 2 小时前
LeetCode题解:2. 两数相加,迭代,JavaScript,详细注释

原题链接:2. 两数相加


解题思路:


  1. 使用一个新链表存储结果,node代表新链表的每个节点。

  2. 创建一个dummy节点,dummy.next指向新链表的头结点。

  3. 使用plus变量,缓存两个值加和后,需要进位的结果,可为01

  4. 同时遍历l1l2,将其想加结果存储在node中,node.val = l1.val + l2.val + plus


/** * @param {ListNode} l1 * @param {ListNode} l2 * @return {ListNode} */var addTwoNumbers = function (l1, l2) {  let dummy = new ListNode(); // 创建虚拟节点,dummy.next指向新链表的头结点  let node = dummy; // 使用node缓存新链表的每个节点  let plus = 0; // 用于存储出现进位时,所需家数
// 不断迭代,直到两个链表都清空 while (l1 || l2) { // 创建一个新节点,用于存储结果 // 在循环开始时创建,避免迭代结束时,多创建出一个节点 node.next = new ListNode(); // 将node向前移动一位,新的值存储在当前节点 node = node.next;
// 缓存两个节点的值,节点为空时,值为0 const x = l1 ? l1.val : 0 const y = l2 ? l2.val : 0 // 计算当前位置两数相加之和,如果上一位之和出现进位,plus为1 const res = x + y + plus;
// 如果结果大于10,当前节点仅存储一位数字 if (res >= 10) { // 存储个位数 node.val = res - 10; // 将进位数字缓存,供下次迭代使用 plus = 1; } else { // 结果小于10,直接存储即可 node.val = res; // 将进位数字置0 plus = 0; } // 将两个链表向后移动一位 l1 && (l1 = l1.next); l2 && (l2 = l2.next); }
// 如果还需要进位,则为链表创建一个值为1的新节点 if (plus) { node.next = new ListNode(1); }
// 将链表返回,dummy.next指向的是新链表的头结点 return dummy.next;};
复制代码


发布于: 2 小时前阅读数: 2
用户头像

Lee Chen

关注

还未添加个人签名 2018.08.29 加入

还未添加个人简介

评论

发布
暂无评论
LeetCode题解:2. 两数相加,迭代,JavaScript,详细注释