java - 为什么在这里初始化 ListNode 两次?
问题描述
问题:给定两个代表两个非负整数的非空链表。这些数字以相反的顺序存储,它们的每个节点都包含一个数字。将两个数字相加并将其作为链表返回。
您可以假设这两个数字不包含任何前导零,除了数字 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;
推荐阅读
- python - Python 正则表达式捕获跨越多行的多个匹配项
- c++ - 将 Mat 传递给线程时,OpenCV C++ 内存泄漏
- tensorflow - 验证损失永远不会减少
- multithreading - 什么是新手的原子操作?
- swift - 谷歌地图内存问题
- amazon-web-services - 如何使用 SSM 调用 AWS Lambda 函数
- java - com.mysql.cj.jdbc.exceptions.MysqlDataTruncation:数据截断:第 1 行的列“矩阵”的数据太长
- javascript - Javascript使用自定义时区以毫秒为单位获取当前时间
- logging - 向使用 systemd 的 Kubernetes 集群添加集中式日志记录
- java - 在springBoot中访问静态资源