为了账号安全,请及时绑定邮箱和手机立即绑定

需要对 ListNode 解决方案的解释

需要对 ListNode 解决方案的解释

繁星点点滴滴 2021-09-03 17:05:37
一直在为考试而学习,但我不明白为什么下面的解决方案有效,它只为 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;    }}
查看完整描述

1 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

在开始循环之前,dummyHead为了便于实现,定义了一个哨兵节点。我们需要返回,dummyHead->next因为 from dummyHead->next,实际的链表开始了。

所以,在循环内部,在每次迭代中,我们实际上从“前一个”节点开始,并设置curr.next和转发我们的链表,curr = curr.next它实际上是“当前”节点。


查看完整回答
反对 回复 2021-09-03
  • 1 回答
  • 0 关注
  • 234 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信