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

[其他] 请看这段代码

全局:

()-+ | | @

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

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

x
int del_dup(LinkNode *root)
{. check 1point3acres for more.
        LinkNode *cur = root;
        set<int> setkey;
        setkey.insert(cur->data);
        while (cur->next)
        {
                if (setkey.count(cur->next->data)). 1point 3acres
                {
                        LinkNode *tmp = cur->next;
                        cur->next = tmp->next;. ----
                        delete tmp;
                }
                else.--
                {
                        setkey.insert(cur->data);
                        cur = cur->next;. check 1point3acres for more.
                }
        }
        return 1;. 1point3acres
}
-baidu 1point3acres
为什么这段代码只传了root链表的指针却可以将root链表的某个元素删除

上一篇:-----..............
下一篇:CypressJob Offer: Accept or Rej?
🔗
parker0203 2013-2-18 12:34:29 | 只看该作者
全局:
不是可以一直next到后面的元素吗, root只是第一个元素
回复

使用道具 举报

全局:
LinkNode *tmp = cur->next; tmp指针指向cur->next的地址 所以执行delete tmp的时候,释放大小为LinkNode的heap空间,这样就删除了一个结点
回复

使用道具 举报

🔗
 楼主| 331873541 2013-2-18 13:01:54 | 只看该作者
全局:
geniusroger2000 发表于 2013-2-18 12:40
LinkNode *tmp = cur->next; tmp指针指向cur->next的地址 所以执行delete tmp的时候,释放大小为LinkNode的 ...

我的意思是,传参数的时候穿的仅仅是个指针,我觉得应该穿**root才可以改变root的内容啊
回复

使用道具 举报

🔗
 楼主| 331873541 2013-2-18 13:02:21 | 只看该作者
全局:
geniusroger2000 发表于 2013-2-18 12:40 .1point3acres
LinkNode *tmp = cur->next; tmp指针指向cur->next的地址 所以执行delete tmp的时候,释放大小为LinkNode的 ...

我的意思是,传参数的时候穿的仅仅是个指针,我觉得应该穿**root才可以改变root的内容啊
回复

使用道具 举报

🔗
chesterli0130 2013-2-18 13:46:56 | 只看该作者
全局:
parker0203 发表于 2013-2-17 23:34 . 1point 3acres
不是可以一直next到后面的元素吗, root只是第一个元素

恩,说的很对~~
.google  и
首先,root指向的对象并没有被删除,或者指向其他的对象,所以不必用 reference pointer~
其次,貌似LZ对链表的概念有点模糊~ 链表是从第一个node开始访问的,后面每一个node都是通过前一个node中的 pointer or reference访问的~ c++里的参数传pointer 是 call by reference,所以链表node对象中的内容会被修改,也就是说链表的结构会被修改,但是链表的head还是原来的那个地址~~. 1point3acres
.
不知是否解答了LZ的一问~~
回复

使用道具 举报

全局:
331873541 发表于 2013-2-18 13:02
我的意思是,传参数的时候穿的仅仅是个指针,我觉得应该穿**root才可以改变root的内容啊

建议找本书看下相关内容~
回复

使用道具 举报

🔗
 楼主| 331873541 2013-2-19 02:37:09 | 只看该作者
全局:
chesterli0130 发表于 2013-2-18 13:46 . .и
恩,说的很对~~ . 1point 3 acres

首先,root指向的对象并没有被删除,或者指向其他的对象,所以不必用 refere ...

我有点明白了,是不是我如果要改变root,就必须传**root,比方说从前面插入一个node,这样root就得变成新的node,这样传*root就改变不了; 而要改变root之后的节点,比如在root加一个新的node,就直接传*root就可以做到了。
回复

使用道具 举报

🔗
chesterli0130 2013-2-19 03:10:22 | 只看该作者
全局:
331873541 发表于 2013-2-18 13:37
我有点明白了,是不是我如果要改变root,就必须传**root,比方说从前面插入一个node,这样root就得变成新 ...

恩~是这样的~
回复

使用道具 举报

🔗
 楼主| 331873541 2013-2-19 03:17:24 | 只看该作者
全局:
chesterli0130 发表于 2013-2-19 03:10
恩~是这样的~

ok, 多谢大神指点。programming-interviews-exposed 这本书的链表删除用的就是传**root,说这是正确方法,我有点被误导了。
回复

使用道具 举报

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

本版积分规则

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