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=新的listNode(0);”我知道这是错的。如果我使用此代码,我的答案将返回“[]”。我不明白为什么会这样
# 1 楼答案
你只需要拿着你需要返回的结果的头部,这样我们就可以打印出来。如果您喜欢“listNode l3=新listNode(0);”,更新l3的引用,然后在函数的末尾,l3是列表的末尾
这里要做的是创建一个虚拟节点引用作为链接列表的头部,并创建另一个引用l3来修改列表