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

为什么要在这里初始化ListNode两次?

和季
2023-03-14

问题:给您两个非空链表,表示两个非负整数。数字按相反顺序存储,每个节点包含一个数字。将这两个数字相加,并将其作为链表返回。

您可以假设这两个数字不包含任何前导零,除了数字0本身。

下面是我在JAVA中对这个问题的解决方案:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode dummy = new ListNode(0);
        ListNode l3 = dummy;
        int carry = 0;

        while(l1 != null && l2 != null){
            int digitValue = (l1.val + l2.val + carry)%10;
            carry = (l1.val + l2.val + carry)/10;

            ListNode newNode = new ListNode(digitValue);

            l3.next = newNode;
            l3 = newNode;

            l2 = l2.next;
            l1 = l1.next;
        }

        while(l1 != null){
            int digitValue = (l1.val + carry)%10;
            carry = (l1.val + carry)/10;

            ListNode newNode = new ListNode(digitValue);

            l3.next = newNode;
            l3 = newNode;

            l1 = l1.next;
        }

        while(l2 != null){
            int digitValue = (l2.val + carry)%10;
            carry = (l2.val + carry)/10;

            ListNode newNode = new ListNode(digitValue);

            l3.next = newNode;
            l3 = newNode;

            l2 = l2.next;
        }

        if(carry != 0 ){
            ListNode newNode = new ListNode(carry);
            l3.next = newNode;
            l3 = newNode;
        }

        return dummy.next;
    }
}

然而,为什么代码必须是

ListNode dummy = new ListNode(0);
ListNode l3 = dummy;

,而不仅仅是:“listNode l3=new ListNode(0);”我知道这是错误的。如果我使用此代码,我的答案将返回[]。我不明白为什么会这样?

共有1个答案

张翰海
2023-03-14

如果您确实喜欢"listNode l3=new ListNode(0);",并且更新l3的引用,那么在函数l3的末尾是名单的尾部。

您在这里所做的是创建一个虚拟节点引用作为链接列表的头部,并创建另一个引用l3来修改列表

ListNode dummy = new ListNode(0);
ListNode l3 = dummy;
 类似资料:
  • 为什么x没有在下面初始化? 平均而言,对于一半的迭代,for循环中的将是,从而初始化。对于另一半,找到的 循环替换为 同样糟糕。只有

  • 我确实读过这篇文章:https://blog.phusion.nl/2015/01/20/docker-and-the-pid-1-zombie-reaping-problem/ 设置一些上下文:这篇文章是关于容器中的僵尸问题的,它试图说服我们这是一个真正的问题。 总的来说,我有复杂的感觉。为什么这很重要?毕竟,即使是在conainer主机操作系统中的僵尸能够释放/杀死这个僵尸的情况下。我们知道容

  • 本文向大家介绍为什么要初始化 CSS 样式相关面试题,主要包含被问及为什么要初始化 CSS 样式时的应答技巧和注意事项,需要的朋友参考一下 因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,如果没对 CSS 初始化往往会出现浏览器之间的页面显示差异。 当然,初始化样式会对 SEO 有一定的影响,但鱼和熊掌不可兼得,但力求影响最小的情况下初始化。 最简单的初始化方法是:*{padding:

  • 问题内容: 第一次选择“添加新项”并添加新选项时,以下各项工作正常。第二次(针对按类别区分的其他元素)它将新选项添加​​到所选元素和第一个元素中。这两个元素都必须绑定到addnew。 奇怪的是,它似乎两次遍历了ajax帖子。我想它正在查找所有“ addnew”值(到目前为止有2个,还会有更多)。我怎样才能只用指定的类来对待元素?希望这是有道理的。 问题答案: 感谢您的回复!我找到了一种方法,可以通

  • 问题内容: 我有这个代码: 这会导致编译错误:可能尚未初始化,这很公平。 现在,我将代码更改为: 我得到同样的编译错误!我必须初始化为null: 那么,不初始化对象和初始化为null有什么区别?如果我声明一个没有初始化的对象,它是否为null? 谢谢 问题答案: 字段(成员变量)被初始化为(或初始化为默认的原始值,如果它们是原始的) 局部变量未初始化,您有责任设置初始值。

  • 根据此堆栈溢出问题的公认(且唯一)答案, 使用 将改为零初始化对象。 那么,为什么呢?, 生成此输出: 定义的两个构造函数都是默认的?正当对于POD类型,默认初始化为零初始化。 根据这个问题的公认答案, 如果POD成员未在构造函数中初始化,也未在类初始化中通过C11初始化,则默认为已初始化。 不管是堆栈还是堆,答案都是一样的。 在C 98中(而不是之后),new int()被指定为执行零初始化。