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

时间:2019-10-17 04:41:40

标签: java data-structures linked-list

问题:您得到两个非空链表,它们表示两个非负整数。这些数字以相反的顺序存储,并且它们的每个节点都包含一个数字。将两个数字相加,然后将其作为链表返回。

您可能会假定两个数字除了数字0本身之外都不包含任何前导零。

这是我在JAVA中解决此问题的方法:

get_restricted_queryset

但是,为什么代码必须为

/**
 * 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 l3 = new ListNode(0);” 我知道这是错误的。如果使用此代码,我的答案将返回“ []”。我不明白为什么会这样?

1 个答案:

答案 0 :(得分:2)

您只需要把结果的抬头放回去,以便我们进行打印。如果您确实喜欢“ listNode l3 = new ListNode(0);”,并更新l3的引用,则在函数l3的末尾是列表的尾部。

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

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