当前位置: 首页 > 知识库问答 >
问题:

如何添加表示为两个非空链表的两个整数?

范翰飞
2023-03-14

问题:给您两个非空链表,表示两个非负整数。数字按相反顺序存储,每个节点包含一个数字。将这两个数字相加,并将其作为链表返回。您可以假设这两个数字不包含任何前导零,除了0本身**

示例:工作测试用例如下:-输入:(2)-

我的解决方案不适用于以下测试用例:

  • 输入:

单链表的定义:

public class ListNode {
    int val;
    ListNode next;
    ListNode(int x) { val = x; }
}

这就是我的解决办法

import java.lang.Math;

class Solution 
{

public ListNode addTwoNumbers(ListNode l1, ListNode l2) 
{
        int count = 0;
        int number1=0;
        int number2=0;
        int temp=0;

        while(l1 !=null)
        {
            temp = l1.val;
            number1 += temp*Math.pow(10,count);
            count++;
            l1= l1.next;
         }

        count = 0;

        while(l2 !=null)
        {
            temp = l2.val;
            number2 += temp*Math.pow(10,count);
            count++;
            l2= l2.next;
        }

        int sum = number1 + number2;
        ListNode l3 = new ListNode(sum%10);
        ListNode l4 = l3;

        while(sum!=0)
        {
          sum=sum/10;
          if (sum!=0) 
          {
          l3.next = new ListNode(sum%10);
          l3=l3.next; 
          } 

        }
        return l4;  

 }
}

共有2个答案

齐承泽
2023-03-14

尽管您的逻辑看起来不错,但当您遇到大型测试用例/表示为链表的大型数字时,可能会遇到溢出情况。

我给大家一个建议,不要把链表节点转换成数字。有一种方法可以通过普通的链表迭代来实现。

试着想想你通常是如何添加数字的,就像我们在学校被教导的那样,把它写在纸上。

颛孙国源
2023-03-14

您有整数溢出<代码>[1,9,9,9,9,9,9,9,9,9]应表示数字9 999 991。您正试图将列表转换为intnumber1),但是int可以容纳的最大数字是2147 483 647,因为int是一个带符号的2位补码32位整数。

在这种情况下,如果Java抛出一个异常,让我们知道它为什么不工作,那就太好了。没有这样的运气。相反,它只是丢弃超过32位的高阶位,给出一些无意义的负值(负值,因为符号位(第一位)恰好是1)。

因此,您需要做的是直接以链表的形式执行添加,而无需转换为int并返回。您可以轻松地拥有三个链表,每个链表最多包含11个元素(如果需要,也可以包含100万个元素),因此不会导致溢出。

如果您不知道什么是数字溢出,请查找它。你的搜索引擎就是你的朋友。

 类似资料:
  • 我有一个关于使用LeetCode的链表添加两个数字的问题。下面是问题本身,我面临的问题,以及我的代码。 给您两个非空链表,表示两个非负整数。数字按相反顺序存储,每个节点包含一个数字。将这两个数字相加,并将其作为链表返回。 您可以假设这两个数字不包含任何前导零,除了数字0本身。 实例 输入:(2- 问题是它打印出: 当结果出现时,它停止。val为0并调用NullPointerException。我不

  • 2.Add Two Numbers [M] 题目: You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbe

  • 21. Merge Two Sorted Lists 问题 Merge two sorted linked lists and return it as a new list. 思路 这个题目很简单也有几个可以考虑的思路,一个是比较直接的方式,重新构造链表,一种是利用递归 思路1 :用新的链表 这里用了一个新的节点了保存结果的链表,这里为了方便链表的扩充,增加一个临时的节点变量(否则每次加入都要遍

  • 问题内容: 我有两个桌子:玩具和游戏。 一个小孩可以有多个玩具。一个小孩可以一次参加多个游戏。 我想要一个查询,该查询将为我提供little_kid涉及的玩具和游戏的总数。 基本上,我想要这两个查询的总和: 是否可以在单个SQL查询中获得它?显然,我可以通过编程的方式对它们进行汇总,但这并不是很理想。 (我意识到人为的例子使模式看起来效率低下。让我们假设我们无法更改模式。) 问题答案: 包装它们并

  • 问题内容: 我有两个数字。例如: 为什么数字不支持算术运算?无论如何,我将如何在Java中将这两个数字相加?(当然,我是从某个地方获取它们的,我不知道它们是Integer还是float等)。 问题答案: 你不知道数字是整数还是浮点数…使用该类时,编译器也不知道你的数字是整数,浮点数还是其他东西。结果,像+和-这样的基本数学运算符不起作用;计算机将不知道如何处理这些值。 开始编辑 根据讨论,我认为一

  • 问题: 给定两个非空链表,表示两个非负整数。数字以相反的顺序存储,每个节点包含一个数字。将这两个数字相加,并以链表形式返回。 您可以假设这两个数字不包含任何前导零,除了数字0本身。 例子: 建议的解决办法: 产出:[7,0,8]; 为什么以下更改会输出[]列表。 任何建议都会有帮助。