查看: 1626| 回复: 9
跳转到指定楼层
上一主题 下一主题
收起左侧

[Leetcode] 刚开始刷题,求问一个小白问题,关于leetcode 第二题

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
楼主最近刚刚开始刷题,之前就只自学了java, 加上一门数据结构入门课程,之前都在刷array的简单题基本没问题,今天开始按顺序刷,第二题关于链表的直接懵了,求解惑。Grandy Yang的代码如下:
public class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode dummy = new ListNode(-1);
        ListNode cur = dummy;
        int carry = 0;
        while (l1 != null || l2 != null) {
            int d1 = l1 == null ? 0 : l1.val;
            int d2 = l2 == null ? 0 : l2.val;
            int sum = d1 + d2 + carry;
            carry = sum >= 10 ? 1 : 0;
            cur.next = new ListNode(sum % 10);
            cur = cur.next;
            if (l1 != null) l1 = l1.next;
            if (l2 != null) l2 = l2.next;
        }
        if (carry == 1) cur.next = new ListNode(1);
        return dummy.next;
    }
}

单链表网上以及自学课程的表述是有一个头节点head,里面是没有数据的,next指向真正存储数据的第一个节点。那这个题创建的dummy又是怎样一个存在呢。为什么不直接用head而要创建一个dummy呢。另外头指针到底有什么用,在代码里面哪里体现呢。求解惑,谢谢大家。


上一篇:我把几大热门语言都学完了但是还是看不懂算法和数据结构题我该怎么办?
下一篇:转码选手刷题两月有感分享带求加米
推荐
杜无为 2021-11-7 15:05:11 | 只看该作者
全局:
dummy head(中文哨兵节点) 只是一种链表的技巧,用不用都随便你。
dummy在删除节点的时候尤其有用,如果不用dummy的话头节点,head需要额外的判断,因为原来的head已经被删除了,你不知道新的head是什么。 用了dummy之后,统一用dummy.next就可以表达了。
回复

使用道具 举报

全局:
Leetcode 里默认头节点就有值了
回复

使用道具 举报

🔗
 楼主| 太平洋小狼 2021-11-7 05:58:32 | 只看该作者
全局:
point8808 发表于 2021-11-6 17:50
Leetcode 里默认头节点就有值了

太感谢了,我正在好奇为啥方法参数里面l1和l2判断为空为什么是直接l1 == null 而不是l1.next == null.
回复

使用道具 举报

全局:
太平洋小狼 发表于 2021-11-06 14:58:32
太感谢了,我正在好奇为啥方法参数里面l1和l2判断为空为什么是直接l1 == null 而不是l1.next == null.
如果l1 == null呢?你操作l1.next 就要npe了
回复

使用道具 举报

🔗
oauth 2021-11-7 23:10:22 | 只看该作者
全局:
搞一个dummy head是linked list里面最常用的一个小trick 相当于一个anchor

回复

使用道具 举报

🔗
 楼主| 太平洋小狼 2021-11-8 12:18:37 | 只看该作者
全局:
oauth 发表于 2021-11-7 10:10
搞一个dummy head是linked list里面最常用的一个小trick 相当于一个anchor

非常感谢
回复

使用道具 举报

🔗
 楼主| 太平洋小狼 2021-11-14 09:37:41 | 只看该作者
全局:
清蓬村民 发表于 2021-11-7 07:20
如果l1 == null呢?你操作l1.next 就要npe了

嗯嗯,我之前以为l1就是个啥数据都没有的头,所以永远不会为null。。。 怪我当时对链表的结构其实没理解嘿,谢谢呢
回复

使用道具 举报

🔗
keruiii 2021-11-14 10:18:39 来自APP | 只看该作者
全局:
楼主 请问可以和你一起刷题吗?我和你水平差不多 上周开始刷题 目前10道 也是java
回复

使用道具 举报

🔗
 楼主| 太平洋小狼 2021-11-14 10:45:09 | 只看该作者
全局:
keruiii 发表于 2021-11-13 21:18
楼主 请问可以和你一起刷题吗?我和你水平差不多 上周开始刷题 目前10道 也是java

可以呀,我现在大概十三天刷了差不多五十题,但全部都是简单题,你愿意的话我们可以一起打卡,我微信是fightingxiaolang
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表