一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 762|回复: 7
收起左侧

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

[复制链接] |试试Instant~ |关注本帖
zzhgetfuture 发表于 2016-4-26 09:55:14 | 显示全部楼层 |阅读模式

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

您需要 登录 才可以下载或查看,没有帐号?获取更多干货,去instant注册!

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应该从来没变过指向的还是一开始的地址啊
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所指向的对象?这样不利于听众理解,也不利于你自己思考。
回复 支持 2 反对 0

使用道具 举报

 楼主| zzhgetfuture 发表于 2016-4-26 10:40:43 | 显示全部楼层
gaocan1992 发表于 2016-4-26 10:28
一般都是用head循环,返回dummy.next这样写吧,清楚些

是的 同意  
回复 支持 1 反对 0

使用道具 举报

desperatelife 发表于 2016-4-26 10:22:26 | 显示全部楼层
本来就是没有变化的吧,还是指向的第一个节点,这个题不就是删除节点嘛
回复 支持 反对

使用道具 举报

gaocan1992 发表于 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 ...

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

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2016-12-11 03:15

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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