gpt4 book ai didi

java - 为什么这里要初始化ListNode两次呢?

转载 作者:行者123 更新时间:2023-12-02 01:16:53 28 4
gpt4 key购买 nike

问题:给你两个非空链表,代表两个非负整数。这些数字以相反的顺序存储,并且每个节点都包含一个数字。将两个数字相加并将其作为链接列表返回。

您可以假设这两个数字不包含任何前导零,除了数字 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);”我知道这是错误的。如果我使用这段代码,我的答案将返回“[]”。我不明白为什么会发生这种情况?

最佳答案

您只需保留需要返回的结果的头部,以便我们可以打印它。如果您确实喜欢“listNode l3 = new ListNode(0);”,并更新 l3 的引用,那么函数末尾的 l3 就是列表的尾部。

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

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

关于java - 为什么这里要初始化ListNode两次呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58425039/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com