逐步解释,有说错的地方欢迎指正。

  1. package leetcode.day_12_03;
  2. /**
  3. * 给你两个非空 的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。
  4. * <p>
  5. * 请你将两个数相加,并以相同形式返回一个表示和的链表。
  6. * <p>
  7. * 你可以假设除了数字 0 之外,这两个数都不会以 0开头。
  8. * <p>
  9. * 示例 1:
  10. * <p>
  11. * 输入:l1 = [2,4,3], l2 = [5,6,4]
  12. * 输出:[7,0,8]
  13. * 解释:342 + 465 = 807.
  14. * 示例 2:
  15. * <p>
  16. * 输入:l1 = [0], l2 = [0]
  17. * 输出:[0]
  18. * 示例 3:
  19. * <p>
  20. * 输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
  21. * 输出:[8,9,9,9,0,0,0,1]
  22. *
  23. * @author soberw
  24. */
  25. public class AddTwoNumbers0002 {
  26. public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
  27. //创建一个空的链表,指定一个头指针,可以是任何数,空着也行,这里我写的0
  28. ListNode ahead = new ListNode(0);
  29. //将用于存放链表的数据,我们都知道这里的赋值是复制的地址值,所以他们其实指向同一个地址
  30. ListNode current = ahead;
  31. //用于存放十位(即如果7+8=15 carry就是存放十位的1的)
  32. int carry = 0;
  33. //循环的终止条件是如果两个参数链表都为空
  34. while (l1 != null || l2 != null) {
  35. //创建两个变量分别存放值,如果已经走到头了就赋值为0
  36. int x = l1 != null ? l1.val : 0;
  37. int y = l2 != null ? l2.val : 0;
  38. //计算和,这里加上carry可能不好理解,其实就是简单的数学知识,个位数上的10在十位数上就是1
  39. //就是说在个位数加上10,相当于在十位数加上1
  40. int sum = x + y + carry;
  41. //转换为十位数
  42. carry = sum / 10;
  43. //存放在预定的链表中(注意格式)
  44. current.next = new ListNode(sum % 10);
  45. //链表向后走,指向下一个空指针
  46. current = current.next;
  47. //如果后面还有元素就向后走
  48. if (l1 != null) {
  49. l1 = l1.next;
  50. }
  51. if (l2 != null) {
  52. l2 = l2.next;
  53. }
  54. }
  55. //最后剩余的一位不能漏
  56. if (carry != 0) {
  57. current.next = new ListNode(carry);
  58. }
  59. //要知道头结点从来都没变过,我们变得只是current的指向,所以我们返回头结点的next就行了
  60. return ahead.next;
  61. }
  62. }
  63. class ListNode {
  64. int val;
  65. ListNode next;
  66. ListNode() {
  67. }
  68. ListNode(int val) {
  69. this.val = val;
  70. }
  71. ListNode(int val, ListNode next) {
  72. this.val = val;
  73. this.next = next;
  74. }
  75. }

测试通过结果:

LeetCode随缘刷题之两数相加的更多相关文章

  1. leetcode刷题2:两数相加add_two_numbers

    题目:两数相加 (难度:中等) 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字. 将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以 ...

  2. 【leetcode】 算法题2 两数相加

      问题      给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例 ...

  3. letcode刷题之两数相加

    letcode里面刷题,坑还是链表不熟,(1)头结点还是有必要设置,否则返回的时候找不到位置:(2)先设置next到新节点再next到下一个节点:都是基础知识 /* * * You are given ...

  4. LeeCode第一次刷题(两数相加)

    题目描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组 ...

  5. LeetCode(2): 两数相加

    本内容为LeetCode第二道题目:两数相加 # -*- coding: utf-8 -*- """ Created on Sun Mar 10 10:47:12 201 ...

  6. LeetCoded第2题题解--两数相加

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

  7. 【LeetCode刷题】——两数之和.1

    ---恢复内容开始--- 一直想在leetcode上面刷题,但是java刚刚摸了一下门,所以迟迟没有动手,今天做了第一道题,感觉自己实在菜的不行,但是还是学到了很多东西, 就记录一下遇到的问题. 首先 ...

  8. LeetCode刷题 - (01)两数之和

    题目描述 给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元 ...

  9. LeetCode每天一题之两数之和

    这个LeetCode刷题系列的博客权当是为自己记一下笔记吧.博客系列会从LeetCode的第一题开始刷,同时会从零开始学习[因为我就是零/(ㄒoㄒ)/~~].同时,如果有写错的地方,希望大佬们在评论区 ...

随机推荐

  1. hadoop 之 hadoop2.7.7升级到hadoop2.8.5

    服务器规划 准备阶段 停服务 stop-yarn.sh stop-dfs.sh 备份 备份NameNode目录 ---------- 101,102操作 ----------------- hdfs- ...

  2. 初识python 之 爬虫:爬取某电影网站信息

    注:此代码仅用于个人爱好学习使用,不涉及任何商业行为!  话不多说,直接上代码: 1 #!/user/bin env python 2 # author:Simple-Sir 3 # time:201 ...

  3. github 创建网络仓库 ,使用git工具将本地文件上传/删除 --- 心得

    1.前言 使用  git做项目控制版本工具,当然,使用SVN也可以,但是,git让人感觉更先进一些,与GitHub结合,用起来很方便,服务端由官网控制. 而SVN分客户端和服务端,都是个人控制,因此, ...

  4. Echart可视化学习(四)

    文档的源代码地址,需要的下载就可以了(访问密码:7567) https://url56.ctfile.com/f/34653256-527823386-04154f 正文: 地图模块高度为 810px ...

  5. println打印的原理

    由于out是System类中的一个不可变的变量 println方法在PrintStream类中 并且在打印都时候都会转换成字符串

  6. 机器学习|线性回归三大评价指标实现『MAE, MSE, MAPE』(Python语言描述)

    原文地址 ?传送门 对于回归预测结果,通常会有平均绝对误差.平均绝对百分比误差.均方误差等多个指标进行评价.这里,我们先介绍最常用的3个: 平均绝对误差(MAE) 就是绝对误差的平均值,它的计算公式如 ...

  7. List转换Map的三种方式

    1.for循环 ... 2.使用guava Map<Long, User> maps = Maps.uniqueIndex(userList, new Function<User, ...

  8. Android官方文档翻译 九 2.2Adding Action Buttons

    Adding Action Buttons 增加动作按钮 This lesson teaches you to 这节课教给你 Specify the Actions in XML 在XML中指定动作 ...

  9. k8s的应用包管理工具helm的部署和使用

    1.概述 我们一般是在k8s里面部署一些简单的应用,比如用deployment,daemonset,statefuleset的方式来部署应用,但是如果要部署一些复杂的应用,那么整个配置的编写.部署的过 ...

  10. Java读取批量Excel文件

    1.首先基础知识: 原文链接:https://blog.csdn.net/baidu_39298625/article/details/105842725 一 :简介 开发中经常会设计到excel的处 ...