【LeetCode】 2. 两数相加 (JAVA)列竖式补0相加 代码有注释

秒速五厘米 2021-06-10 20:37 485阅读 0赞

题目链接

https://leetcode-cn.com/problems/add-two-numbers/

解题思路

其实这道题目本来是没有解出来的,但是代码写了个差不多,但是咋着都不好使,我看他们写的也挺好的,我就写写我的理解把

  • 这道题目其实就是算两个数字相加
  • 要注意的地方有两点(1)相加大于等于10要进位;(2)l1和l2长度不一样
  • 要熟悉两个数相加怎样列竖式,缺位补0

其实这两点我都想到了,但是我还是没写出来,所以不得不去题解区看了看别人家的代码。。。

列竖式

如果两个链表长度相等,我们拿题目给的例子

l1: 2 -> 4 -> 3
l2: 5 -> 6 -> 4

计算的结果相当于是:342 + 465 = 708
image.png

如果不等长的话,我们就在短的那个链表上补0

l1: 2 -> 4 -> 3
l2: 5

计算的结果相当于是:243 + 005 = 248
image.png


l1: 2
l2: 5 -> 6 -> 4
image.png

我们看似是将两个不等长的链表进行相加,其实是补了0来进行运算

代码

  1. /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */
  2. class Solution {
  3. public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
  4. ListNode res = new ListNode(0); // 声明结果ListNode
  5. ListNode restemp = res; // 声明临时来进行操作
  6. int temp = 0; // 用来标识是否进位,只有0或者1两个可能
  7. while (l1 != null || l2 != null) {
  8. int x = l1 == null ? 0 : l1.val; // x或者y如果为空的话就补零
  9. int y = l2 == null ? 0 : l2.val;
  10. int sum = x + y + temp; // 计算两个数字相加的值,加上之前的进位
  11. temp = sum / 10; // 取商,看是否需要进位
  12. sum = sum % 10; // 取余
  13. restemp.next = new ListNode(sum); // 将我们计算的值作为新节点放在restemp的下一个上
  14. restemp = restemp.next; // 将restemp的下一个作为新的节点
  15. if (l1 != null) l1 = l1.next; // 如果l1和l2不为空的话就指向下一个,如果到头了就会变成null,null的话就不会再指向下一个了
  16. if (l2 != null) l2 = l2.next;
  17. }
  18. if (temp == 1) restemp.next = new ListNode(temp); // 最后如果有进位的话再添加一个节点
  19. return res.next; // 为了方便循环,所以在声明时设置了res的第一个值为0(其实这个没用),第二个值才是第一个,所以时res.next
  20. }
  21. }

发表评论

表情:
评论列表 (有 0 条评论,485人围观)

还没有评论,来说两句吧...

相关阅读

    相关 LeetCode 2. 相加 JAVA

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

    相关 LeetCode2相加

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

    相关 LeetCode2. 相加

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

    相关 leetcode2. 相加

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

    相关 LeetCode-2. 相加

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

    相关 LeetCode(2):相加

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

    相关 leetcode-2 相加

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