关于算法 两数相加 (leetcod上的的一道算法题)

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

首先我们要了解这道题究竟想得到一个什么答案,而且其中的过程是什么样的,这样才能更好的开展下一步操作.
如图所示 每一个矩形都是一个对象ListNode,对象中封装了两个值,一个是number类型的值val,另一个是ListNode类型的下一个对象,这样就形成了链表.
将l1与l2对位的val相加得到的值赋给结果链表.
这里必须考虑到这几种情况
进位 上下两个值相加得到的值溢出大于10需要进位到下一位当中
上下两个链表结点数不相同 没有对位值 怎么办
何时结束相加 如何判断接下来的节点是最后一个
如何将相加所得的值赋值给结果链表

   var addTwoNumbers = function(l1, l2) {//首先需要创建结果链表的表头c对象 var c = new ListNode(0);//在创建一个ListNode对象 因为在接下来的操作中会反复操作结果节点,并且是单向链表,在返回值的时候,还需要用到 c 对象,以防最后找不到头节点 var result = c;//curry变量用于进位初始值设为0 在第一次相加时不需要这个变量,赋值为0 不会影响下面的操作var curry = 0;//设置一个while循环,每相加一次 需要对位节点向后移动, 如果都是null就代表相加结束while (l1 != null || l2 != null) {//解决两个链表节点数不相同的问题 如果没有对位节点就将对位节点设置为0 这样也不会影响结果var a = (l1 == null ? 0 : l1.val);var b = (l2 == null ? 0 : l2.val);//sum是上下两个节点的val值与进位上来的curry相加在与10取余所得,也是这个结果节点的值,符合相加原理 var sum = (a + b + curry) % 10;//分离出来进位的值curry = parseInt((a + b + curry) / 10);//这里是整个算法的核心,将值赋给下一个节点result.next = new ListNode(sum);//而将节点向后推result = result.next;//这里是判断上下两个链表的结束点,进行推移if (l1 != null) l1 = l1.next;if (l2 != null) l2 = l2.next;}//如果在循环完成之后,curry进位还是大于0 ,根据加法原理 需要进位if (curry > 0) {result.next = new ListNode(curry);}//c节点是表头 返回有值的第一个节点return c.next;};

js 实现两数相加的算法相关推荐

  1. 【数据结构与算法】之深入解析运用链表结构计算“两数相加”的算法实现

    一.题目要求 给出两个非空的链表,表示两个非负的整数.它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储 一位数字.请将两个数相加,并以相同形式返回一个表示和的链表(可以假设除了数字 0 之外 ...

  2. 两数相加——哈希表算法

    力扣刷题总结 一.前言 二.两数相加 1.题意 2.示例 3.题目解析 4.官方题解 思路分析 哈希表算法的优势: 思路及算法: 代码分析 C语言代码实现及详细注释说明: python代码实现及详细注 ...

  3. 【每日一算法】两数相加

    微信改版,加星标不迷路! 每日一算法-两数相加 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两 ...

  4. js 数字相加_Python练习:解题 - 两数相加(JS, TS, PY3版)

    两数相加 题目描述 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新 ...

  5. 算法实战(二)两数相加

    一.前言 今天开始第二题,有句话写给自己也写给大家,Rome wasn't built in one day!算法很难,刷题的过程也很痛苦,但是只要我们能坚持下去,以后的收获将会是巨大的.希望我们都能 ...

  6. 【数据结构与算法】之深入解析“两数相加II”的求解思路与算法示例

    一.题目要求 给你两个非空链表来代表两个非负整数,数字最高位位于链表开始位置,它们的每个节点只存储一位数字,将这两数相加会返回一个新的链表. 可以假设除了数字 0 之外,这两个数字都不会以零开头. 示 ...

  7. leetcode算法—两数相加 Add Two Numbers

    关注微信公众号:CodingTechWork,一起学习进步. 题目 Add Two Numbers: You are given two non-empty linked lists represen ...

  8. 【前端来刷LeetCode】两数之和与两数相加

    大部分玩前端的小伙伴,在算法上都相对要薄弱些,毕竟调样式.调兼容就够掉头发的了,哪还有多余的头发再去折腾. 确实在前端中需要使用到算法的地方是比较少,但若要往高级方向发展,算法的基本功就非常重要啦.对 ...

  9. 【LeetCode】2.两数相加

    1.两数相加 一.问题描述 给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字. 请你将两个数相加,并以相同形式返回一个表示和的链表 ...

最新文章

  1. 强者愈强!疫情拉大“数据资产”贫富差距,顶级公司数据建设靠什么
  2. datetime对应的java类型_MySQL数据类型笔记
  3. [机器学习] 模型稳定度指标PSI
  4. Wix 安装部署(二)自定义安装界面和行为
  5. Linux实用代码--文件系统操作
  6. centos6.5 升级python2.6到python2.7
  7. 游戏框架设计【各大管理系统篇】
  8. 国际及港澳台电话国家代码表
  9. 超参数(Hyperparameter)
  10. 这十年,阿里开发者毕玄的日常
  11. 伊斯坦布尔之旅第一天:蓝色清真寺和圣索菲亚博物馆
  12. android ip v6 teredo,Win7系统通过teredo连接IPv6的方法
  13. 2014年大数据解决方案提供商面临三大挑战
  14. Matlab画三维立体网状图形(类似魔方)
  15. ENVI 混合像元分解
  16. python tkinter 桌面小程序开发从入门到界面美化(主题应用推荐)
  17. 制造业ERP怎么创新与转型(阿朱说)
  18. ReXNet学习笔记 --- ReXNet: Diminishing Representational Bottleneck on Convolutional Neural Network
  19. 一文带你读懂 Promise
  20. google地图测距原码

热门文章

  1. Docker_02_Docker基本命令使用
  2. 湖北c语言二级考试真题,湖北省C语言二级考试训练题.ppt
  3. Python中整数移位及二进制串操作
  4. Pycharm撤销操作和代码跳转后退回操作以及消除波浪线操作快捷键
  5. 使用树莓派SPI接口实现RFID门禁功能
  6. Feature-Preserving Ultrasound Speckle Reduction via L0 Minimization
  7. Metabase学习教程:权限-2
  8. Java实现发送手机验证码
  9. WorldWind源码剖析系列:BMNG类构造函数深入分析
  10. vs莫名其妙断点失效的一种解决方法