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

[Leetcode] Remove Linked List Elements简单题但是dummy对象传递这地方不明白

全局:

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

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

x
ListNode dummy = new ListNode(0);
        dummy.next = head;
        head = dummy;

这里的第三行dummy地址传递给head, 那dummy.next是否也传递给了head.next, 如果不是,那我写   
while(dummy.next != null) {
            
            if (dummy.next.val == val)
                dummy.next = dummy.next.next;
               
            else dummy = dummy.next;
            
        }
        
        return head.next;
结果是正确的。但我感觉head.next应该从来没变过指向的还是一开始的地址啊

上一篇:leetcode更新之后的frequency是啥意思?
下一篇:想问一道Google 常考的压缩字符串题目
推荐
stellari 2016-4-26 10:16:05 | 只看该作者
全局:
假设一开始head引用的的内存中的实际对象是A。A所指向的next对象是B。所以内存中的连接是A->B

现在创建了dummy,它引用了内存中的C对象。
第二行dummy.next = head;就是让C->A,将C和A两个node连在一起。现在链表变成C->A->B
第三行head = dummy执行后则没有发生任何链接动作,只是现在head和dummy同时指向C对象而已。

接下来,你需要派一个引用变量遍历整个链表,另一个引用变量还是指向C不动,因为最后我们需要知道C的位置。你派谁去遍历,谁去守家其实都无所谓。所以在你第三行以后的代码中,把head和dummy字样全部替换成对方,会得到完全一样的结果。

总之,你考虑这类问题时,最好是以实际内存中的对象为基础,而不是以引用变量为基础。在“dummy.next是否也传递给了head.next”这种表述中,因为head引用的对象发生了变化,那么你所说的head.next指的是变化前的head所指向的对象,还是变化后head所指向的对象?这样不利于听众理解,也不利于你自己思考。
回复

使用道具 举报

推荐
 楼主| zzhgetfuture 2016-4-26 10:40:43 | 只看该作者
全局:
gaocan1992 发表于 2016-4-26 10:28
一般都是用head循环,返回dummy.next这样写吧,清楚些

是的 同意  
回复

使用道具 举报

🔗
desperatelife 2016-4-26 10:22:26 | 只看该作者
全局:
本来就是没有变化的吧,还是指向的第一个节点,这个题不就是删除节点嘛
回复

使用道具 举报

🔗
citynart 2016-4-26 10:28:31 | 只看该作者
全局:
一般都是用head循环,返回dummy.next这样写吧,清楚些
回复

使用道具 举报

🔗
 楼主| zzhgetfuture 2016-4-26 10:37:57 | 只看该作者
全局:
stellari 发表于 2016-4-26 10:16
假设一开始head引用的的内存中的实际对象是A。A所指向的next对象是B。所以内存中的连接是A->B

现在创建 ...

第一次发帖提问 表述不清晰请见谅。还好我说的意思你都完全明白。  现在终于理解了这一部分了 谢谢 !

另外还有个问题请教下 以上面代码为例 return的结果 算是嵌套的链表吗? 就是遍历时obj.next对应的是节点 但head.next确实删除指定节点后的链表  这个地方我有些糊涂
回复

使用道具 举报

无效楼层,该帖已经被删除
🔗
stellari 2016-4-27 11:48:16 | 只看该作者
全局:
zzhgetfuture 发表于 2016-4-26 10:37
第一次发帖提问 表述不清晰请见谅。还好我说的意思你都完全明白。  现在终于理解了这一部分了 谢谢 !

...

我理解你说的意思,不过你的表述上确实需要稍微琢磨一下……

首先,obj.next是节点,返回的head.next当然也是节点。这是毫无疑问的。

关键在于:如果知道了“链表的第一个node”,我们就能通过这个node找到“链表中的所有node”。因此,在这道题里,“链表的第一个node”就可以代表“链表本身”。这两者我们认为是等同的。所以,题里要求你返回“链表”时,实际的意思就是返回“链表的第一个node”即可。
回复

使用道具 举报

🔗
 楼主| zzhgetfuture 2016-4-29 02:48:44 | 只看该作者
全局:
stellari 发表于 2016-4-27 11:48
我理解你说的意思,不过你的表述上确实需要稍微琢磨一下……

首先,obj.next是节点,返回的head.next ...

已经明白了  以后我会多注意表述方面的问题   这有利于对知识结构的理解 也不会让别人难以揣摩    谢谢你!
回复

使用道具 举报

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

本版积分规则

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