描述

You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

You may assume the two numbers do not contain any leading zero, except the number 0 itself.

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
Explanation: 342 + 465 = 807.

中文解释

给定两个非空的链表里面分别包含不等数量的正整数,每一个节点都包含一个正整数,肯能是0,但是不会是01这种情况。我们需要按照倒序计算他们的和然后再次倒序输出。

解题思路

这题没有什么巧妙的方式,不过仔细思考一下,它其实是在模拟正常的多位数加法。我们试想在计算多位数加法的时候,从最末位开始计算,如果大于10就进位,并加到下次高位计算中;如果不大于10继续计算;就这样我们就有了下面的阶梯思路。
一次循环就可以搞定,通过判断他们其中是不是空,就像是多位数加减法,如果一个高位没有了,当然也要继续计算,所以有了下面默认 int carry = 0,然后通过 sum / 10 算出进位,通过 sum % 10 算出当前位,这个题就迎刃而解。

源码

public class AddTwoNumbers {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {ListNode tempNode = new ListNode(0);ListNode a = l1, b = l2, curr = tempNode;int carry = 0;while (a != null || b != null) {int x = a != null ? a.val : 0;int y = b != null ? b.val : 0;int sum = carry + x + y;carry = sum / 10;curr.next = new ListNode(sum % 10);curr = curr.next;if (a != null) a = a.next;if (b != null) b = b.next;}if (carry > 0) {curr.next = new ListNode(carry);}return tempNode.next;}public static void main(String[] args) {ListNode l1 = new ListNode(2);l1.add(new ListNode(4));l1.add(new ListNode(3));ListNode l2 = new ListNode(5);l2.add(new ListNode(6));l2.add(new ListNode(4));ListNode listNode = new AddTwoNumbers().addTwoNumbers(l1, l2);System.out.println(listNode.val);while (listNode.next != null) {System.out.println(listNode.next.val);listNode = listNode.next;}}
}class ListNode {int val;ListNode next;ListNode(int x) {val = x;}public void add(ListNode next) {ListNode last = getLast(this);last.next = next;}private ListNode getLast(ListNode next) {while (next.next != null) {return getLast(next.next);}return next;}
}

原题地址

https://leetcode.com/problems...

作者

本文作者麻酱,欢迎讨论,指正和转载,转载请注明出处。
如果兴趣可以关注作者微信订阅号:码匠笔记

每日一则 LeetCode: Add Two Numbers相关推荐

  1. LeetCode Add Two Numbers II(栈)

    问题:给出两个链表表示的整数,求其和 思路:因为链表的第一个结点是最高位,最后一个结点是最低位.先将两个链表放入两个栈中.然后从两个栈中取出元素,从低到高位相加. 具体代码参考: https://gi ...

  2. LeetCode:Add Two Numbers

    题目链接 You are given two linked lists representing two non-negative numbers. The digits are stored in ...

  3. [LeetCode] Add Two Numbers

    题目链接: https://oj.leetcode.com/problems/add-two-numbers/ 问题: You are given two linked lists represent ...

  4. leetcode:Add Two Numbers(java)

    package Leetcode;/*** 题目:* You are given two non-empty linked lists representing two non-negative in ...

  5. [LeetCode] Add Two Numbers(stored in List)

    首先,演示一个错误的reverList 1 class Solution { 2 public: 3 ListNode* reverse(ListNode* root) 4 { 5 if(NULL = ...

  6. LeetCode Add Two Numbers

    题意:链表加法 代码如下: class Solution {ListNode addTwoNumbers(ListNode l1, ListNode l2){ListNode cur1 = l1, c ...

  7. leetcode add Two Numbers

    部分 conditional operators  ?:写的statements 在有的编译器下能通过,有的可能通不过 base operand of '->' has non-pointer ...

  8. LeetCode 445. Add Two Numbers II--面试算法题--C++,Python解法

    题目地址:Add Two Numbers II - LeetCode You are given two non-empty linked lists representing two non-neg ...

  9. [Leetcode] 445. Add Two Numbers II

    问题: https://leetcode.com/problems/add-two-numbers-ii/#/description 思路:该题与"415. Add Strings" ...

最新文章

  1. C++实现二分查找(递归方法和非递归方法)
  2. 分享Kali Linux 2017年第24周镜像文件
  3. python从入门到项目实战李兴华网盘_贺胜军Python轻松入门到项目实战【经典完整版】...
  4. 深度学习-机器学习(神经网络的应用 上)
  5. P8215-[THUPC2022 初赛]分组作业【网络流】
  6. Windows Live Writer 2012离线发布WP文章教程
  7. 自动驾驶路径规划论文解析(6)
  8. 零碎技术栈01_UML画图分析
  9. C#中ManualResetEvent用法总结
  10. bom树形结构 表设计_按树型显示BOM的结构
  11. 贝叶斯(三)先验分布的确定
  12. java项目里bean文件夹_JavaBean的class文件必须放在WEB-INF文件夹中。()
  13. 中国冰淇淋市场深度评估及发展趋势预测报告(2022版)
  14. 电脑上的记事本便签纸怎么用
  15. UE5中置人利用iphone驱动虚拟人面部
  16. 华为A1路由器设置虚拟服务器,华为a1路由器wifi定时加速功能的详细操作设置方法...
  17. 天津理工大学计算机学院绩点,天津理工大学花宇杰:平均绩点4.0你该这般青春昂扬...
  18. 常用小波基函数以及多尺度多分辨率的理解1
  19. Spring框架核心思想
  20. k8s containerd集群配置安装完整踩坑教程

热门文章

  1. php正则表达式判断url,判断url的正则表达式
  2. LineatLayout设置背景为.9图后产生位移
  3. (004)RN开发VSCode调试ReactNative项目
  4. mysql数据库--数据的增删改
  5. 微信开发:微信js_sdk 分享,前端部分(二)
  6. A Horrible Poem(bzoj 2795)
  7. 【日志】2011.12.24
  8. 在centos上,oracle数据库更改IP后无法启动监听,解决方法
  9. JDK8中好用的日期处理-LocalDate类-LocalTime-LocalDateTIme,mysql解决时区相差13小时的问题,日期格式器DateTimeFormatter
  10. 解决 Iframe跨域session 丢失问题