来自:程序员面试

作者:reed,一个热爱技术的斜杠青年,程序员面试联合创始人

题目描述

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

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

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

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

分析

运算规则和我们怎么做加法很像。我们做加法的时候加数和被加数的个位相加产生和的个位数,并且如果相加的结果大于10,需要向十位产生进位。同理十位、百位。
此题中我们也可以采取这种方式。
(head1.val + head2.val + jinwei) % 10 就是结果中此位置的值。而新的进位为(head1.val + head2.val + jinwei) / 10 。
有两个地方是主要注意的。
1、可能会出现head1或者head2已经为null了的情况。
2、最后head1和head2均为null以后,还要考虑jinwei如果不为0的情况,此时要加其加至链表末尾。

通过下图能很好的解释分析中介绍的内容。

代码如下

public ListNode addTwoNumbers(ListNode l1, ListNode l2) {if (l1 == null) {return l2;}if (l2 == null) {return l1;}int jinwei = 0;ListNode res = new ListNode(-1);ListNode tmp = res;while (l1 != null && l2 != null) {int sum = l1.val + l2.val + jinwei;res.next = new ListNode(sum % 10);res = res.next;jinwei = sum / 10;l1 = l1.next;l2 = l2.next;}while (l1 != null) {int sum = l1.val + jinwei;res.next = new ListNode((sum) % 10);res = res.next;jinwei = sum / 10;l1 = l1.next;}while (l2 != null) {int sum = l2.val + jinwei;res.next = new ListNode((sum) % 10);res = res.next;jinwei = sum / 10;l2 = l2.next;}if (jinwei == 1) {res.next = new ListNode(1);}return tmp.next;}

下面这种代码看起来或许会更简洁一点。

public ListNode addTwoNumbers2(ListNode l1, ListNode l2) {if (l1 == null) {return l2;}if (l2 == null) {return l1;}int jinwei = 0;ListNode res = new ListNode(-1);ListNode tmp = res;while (l1 != null || l2 != null) {int val1 = l1 == null ? 0 : l1.val;int val2 = l2 == null ? 0 : l2.val;int sum = val1 + val2 + jinwei;res.next = new ListNode(sum % 10);res = res.next;jinwei = sum / 10;if (l1 != null) {l1 = l1.next;}if (l2 != null) {l2 = l2.next;}}if (jinwei == 1) {res.next = new ListNode(1);}return tmp.next;}

写在最后:单个人的力量是有限的,如果你有更好的解法,欢迎留言交流。

长按订阅更多精彩▼

如有收获,点个在看,诚挚感谢

leetcode2. 两数相加--每天刷一道leetcode系列!相关推荐

  1. leetcode1. 两数之和--每天刷一道leetcode系列!

    来自:程序员面试 作者:reed,一个热爱技术的斜杠青年,程序员面试联合创始人 题目描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个整数,并返回他们 ...

  2. LeetCode2.两数相加

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

  3. [Swift]LeetCode2. 两数相加 | Add Two Numbers

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  4. 简单算法题:leetcode-2 两数相加

    算法撸一遍,从简单的开始. 做leetcode题目的时候,经常百度答案,但感觉大多不是我想要的,很多我不能理解.现在也做了一些算法题,哪些并不是很深奥,但需要一些技巧,简单的算法题更多的是经验值.这里 ...

  5. Leetcode-2 两数相加【c语言】

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

  6. leetcode-2 两数相加

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

  7. leetcode2 两数相加

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

  8. Leetcode--2. 两数相加

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

  9. LeetCode2. 两数相加

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

最新文章

  1. PHP构建数据结构填充数据
  2. Java并发编程之CountDownLatch源码解析
  3. 【差分隐私发论文朝哪个方向走?】差分隐私的过去,现在和将来
  4. 一个到顶部自动加载更多的ListView
  5. 毕业生简单的用Python实现一个信息管理系统【含示例代码】
  6. 数据库比对升级脚本生成工具分享
  7. 有什么计算机应用基础的app,计算机应用基础软件
  8. x10I pC套件 官方网站下载
  9. 如何裁剪动图的边框?教你一键在线裁剪动图
  10. VUE全局this指向
  11. 安装mysql 遇到问题
  12. 录音文件下载_录音内容如何导出?对于小白来说是难题,一招教你搞定它
  13. 什么是电动汽车充电桩功能介绍
  14. ปอเช็ตติโน่ เสียดายโอกาสของทีมในเกมฟัดหงส์
  15. a360desktop有用吗_A360 Desktop 停用 - 2018 年 6 月 19 日
  16. 最小生成树Prim算法Java版
  17. ubuntu:VIM使用
  18. C++ 标准容器库小结
  19. 聚焦“云XR如何赋能元宇宙”,3DCAT实时云渲染首届行业生态合作交流会成功举办
  20. Ubuntu18.04安装wps office

热门文章

  1. 2020牛客多校第3场:Two Matchings[找规律+dp]
  2. java表或视图不存在_Error querying database. Cause: java.sql.SQLSyntaxErrorException: ORA-00942: 表或视图不存在...
  3. 学习python一开始枯燥_编程零基础应当怎样开始学python?他说,看这三个经典方法...
  4. Linux进程突然挂死,当主进程突然死亡时,我该如何杀死linux spawnProcess?
  5. 利用php和ajax实现的,利用PHP和AJAX实现数据库增值
  6. linux 磁盘分区情况6,Linux磁盘分区介绍
  7. oracle+块头csc,数据块转储及RDBA的转换
  8. 进程和线程的区别?什么时候用进程?什么时候用线程?----看到好的复制到自己的园子里哈哈...
  9. 如何在FineUIMvc(ASP.NET MVC)视图中绑定多个模型?
  10. 《Python从小白到大牛》第4章 Python语法基础