需要对 ListNode 解决方案的解释

一直在为考试而学习,但我不明白为什么下面的解决方案有效,它只为 curr.next 节点赋值,但是 curr.current 的值在哪里?哪位好心人能解释一下。谢谢!


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


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


例子:


输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)


输出:7 -> 0 -> 8

解释:342 + 465 = 807。


/**

 * 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 dummyHead = new ListNode(0);

        ListNode p = l1, q = l2, curr = dummyHead;

        int carry = 0;

        while (p != null || q != null) {

            int x = (p != null) ? p.val : 0;

            int y = (q != null) ? q.val : 0;

            int sum = carry + x + y;

            carry = sum / 10;

            curr.next = new ListNode(sum % 10);

            curr = curr.next;

            if (p != null) p = p.next;

            if (q != null) q = q.next;

        }

        if (carry > 0) {

            curr.next = new ListNode(carry);

        }

        return dummyHead.next;

    }

}


繁星点点滴滴
浏览 235回答 1
1回答

慕姐8265434

在开始循环之前,dummyHead为了便于实现,定义了一个哨兵节点。我们需要返回,dummyHead->next因为 from dummyHead->next,实际的链表开始了。所以,在循环内部,在每次迭代中,我们实际上从“前一个”节点开始,并设置curr.next和转发我们的链表,curr = curr.next它实际上是“当前”节点。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java