LeetCode题库整理【Java】

2.两数相加

题目:给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例1

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

示例2

输入:(9) + (1 -> 9-> 9-> 9-> 9-> 9 -> 9)
输出:1 -> 0 -> 0
原因:9 + 9999991 = 10000000

class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {ListNode head1 = l1;ListNode head2 = l2;ListNode head3 = new ListNode(0);ListNode result =head3;//进位标志boolean flag = false;while(head1!=null || head2!=null) {//获取对应位置的值然后相加int x = (head1!=null) ? head1.val : 0;int y = (head2!=null) ? head2.val : 0;int sum = flag ? x+y+1 : x+y;//判断是否有新的进位if( (sum/10) != 0) {sum %= 10;flag = true;}elseflag = false;//新增节点result.next = new ListNode(sum % 10);result = result.next;if (head1 != null)head1 = head1.next;if (head2 != null)head2 = head2.next;         }//处理最后一位相加之后的进位if(flag)result.next=new ListNode(1);return head3.next;}
}

在自己的电脑软件上做测试时,可以将ListNode类写为内部类,在public ListNode addTwoNumbers(ListNode l1,ListNode l2) { }方法体中补全代码,在主函数main()入口中输入链表l1和l2的内容并生成链表,并将输出结果l3的内容打印出来。

完整的Java测试代码如下

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
package leet.code;import java.util.Scanner;public class AddTwoNumbers {@SuppressWarnings("resource")public static void main(String[] args) {// TODO Auto-generated method stubAddTwoNumbers add = new AddTwoNumbers();      AddTwoNumbers.ListNode head1 = add.new ListNode(0);AddTwoNumbers.ListNode l1=head1;AddTwoNumbers.ListNode head2 = add.new ListNode(0);AddTwoNumbers.ListNode l2=head2;AddTwoNumbers.ListNode head3 = add.new ListNode(0);Scanner sc = new Scanner(System.in);//在控制台输入链表l1各个节点的值,以逗号隔开String str1 = sc.nextLine();String[] num1 = str1.split(",");//用逗号隔开int[] num1int = new int[num1.length];for(int i=0;i<num1int.length;i++) {num1int[i] = Integer.parseInt(num1[i]);l1.next = add.new ListNode(num1int[i]);l1 = l1.next;} head1 = head1.next;//在控制台输入链表l2各个节点的值,以逗号隔开String str2 = sc.nextLine();String[] num2 = str2.split(",");//用逗号隔开int[] num2int = new int[num2.length];for(int i=0;i<num2int.length;i++) {num2int[i] = Integer.parseInt(num2[i]);l2.next = add.new ListNode(num2int[i]);l2 = l2.next;}head2 = head2.next;head3 = add.addTwoNumbers(head1, head2);while(head3!=null) {System.out.println(head3.val);    head3=head3.next;}}public class ListNode { //建立内部类ListNodeint val;ListNode next;ListNode() {}ListNode(int val) { this.val = val; }ListNode(int val, ListNode next) { this.val = val; this.next = next; }}public ListNode addTwoNumbers(ListNode l1,ListNode l2) {ListNode head1 = l1;ListNode head2 = l2;ListNode head3 = new ListNode(0);ListNode result =head3;//进位标志boolean flag = false;while(head1!=null || head2!=null) {//获取对应位置的值然后相加int x = (head1!=null) ? head1.val : 0;int y = (head2!=null) ? head2.val : 0;int sum = flag ? x+y+1 : x+y;//判断是否有新的进位if( (sum/10) != 0) {sum %= 10;flag = true;}elseflag = false;//新增节点result.next = new ListNode(sum % 10);result = result.next;if (head1 != null)head1 = head1.next;if (head2 != null)head2 = head2.next;            }//处理最后一位相加之后的进位if(flag)result.next=new ListNode(1);return head3.next;}
}


参考网址:https://www.cnblogs.com/mfrank/p/10472639.html
该文章中还给出了很多人可能会踩坑的解题思路,并且给出了代码,也写得很有趣

LeetCode题库整理【Java】—— 2 两数相加相关推荐

  1. LeetCode题库整理【Java】—— 1两数之和

    LeetCode题库整理[Java] 1.两数之和 题目:给定一个整数数组和一个目标值,找出数组中和为目标值的两个数.你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nu ...

  2. LeetCode题库整理【Java】—— 3 无重复字符的最长子串

    LeetCode题库整理[Java] ## 3 无重复字符的最长子串 题目:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" ...

  3. LeetCode题库整理【Java】—— 7整数反转

    LeetCode题库整理[Java] 7.整数反转 题目:给出一个32位的有符号整数,你需要将这个这个整数中每位上的数字进行反转. 示例1: 输入: 123 输出: 321 示例2: 输入: -123 ...

  4. LeetCode 题库 全 JAVA 解题---771.宝石与石头

    LeetCode 题库 全 JAVA 解题 771.宝石与石头 原题回顾: 给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头. S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥 ...

  5. leetcode力扣刷题系列python——2、两数相加

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

  6. leetcode 2. Add Two Numbers | 2. 两数相加(Java)

    题目 https://leetcode.com/problems/sum-of-two-integers/ 题解 需要注意 当两个链表不一样长时 的收尾处理. /*** Definition for ...

  7. LeetCode(Java) 两数相加

    题目描述 给定两个代表非负数的链表,数字在链表中是反向存储的(链表头结点处的数字是个位数,第二个结点上的数字是百位数-),求这个两个数的和,结果也用链表表示. 输入:(2 -> 4 -> ...

  8. leetcode题库:4.两个排序数组的中位数

    题目: /**   *leetcode题库:4. 求两个排序数组的中位数  *  *  给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 .  *  请找出这两个有序数组的中位数. ...

  9. 两数相加c++_LeetCode 热题 HOT 100(01,两数相加)

    LeetCode 热题 HOT 100(01,两数相加) 不够优秀,发量尚多,千锤百炼,方可成佛. 算法的重要性不言而喻,无论你是研究者,还是最近比较火热的IT 打工人,都理应需要一定的算法能力,这也 ...

最新文章

  1. 《棋牌游戏服务器》玩法服务器架构
  2. Android測试APP工具(一)
  3. php项目私有化部署保护代码,ThinkPHP项目安全配置解决方案
  4. 【人脸识别终结者】多伦多大学反人脸识别,身份欺骗成功率达99.5%
  5. 飞流直下三千尺的acd看图软件下载
  6. java将json转为hashmap_java – 将JSON字符串转换为HashMap
  7. 多元函数概念思维导图_(重要!)高中数学概念品味+思维导图(全)-2020年1月13日更新 第16章(最后一章) 统计初步...
  8. LeetCode(700)——二叉搜索树中的搜索(JavaScript)
  9. 基础知识——常见文件格式
  10. echarts 柱状图点击事件
  11. 大学机器人类公选课(ROS机器人高效编程)申请表、大纲、部分教案、进度表等材料分享
  12. 小程序 | 微信小程序实现倒计时(节日校庆日等倒计时)
  13. c语言次方函数,C 求n次方函数
  14. 配色表 色卡 前段色彩
  15. 华为云教程(弹性云服务器ECS)
  16. MindSpore实现手写数字识别
  17. 一步一图带你深入理解 Linux 虚拟内存管理
  18. 2021-2027全球及中国泳池水监测设备行业研究及十四五规划分析报告
  19. MRP专题三:物料主数据MRP参数解释
  20. 50个最实用的 Photoshop 实例教程【照片特效篇】

热门文章

  1. 超全Linux备份工具集合,满足你的所有需要!
  2. 共享马扎的火爆,原来是一场营销!
  3. easyUI layout 中使用tabs+iframe解决请求两次方法
  4. 【软件领域知识整理】贵金属交易的名词解释(一)
  5. windows7 删除hiberfil.sys文件的方法
  6. dubbo服务的运行方式
  7. 郁金香汇编代码注入怎么写看雪_世界黑客编程大赛冠军的汇编代码 你见过吗?...
  8. MySQL数据库是非关系_MySQL(数据库)基础知识、关系型数据库yu非关系型数据库、连接认证...
  9. 启动activemq_「Java」 - SpringBoot amp; ActiveMQ
  10. c#byte字节流的读取_C#中的byte关键字