| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 904 人关注过本帖
标题:关于循环链表的合并
取消只看楼主 加入收藏
果沫
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:198
专家分:960
注 册:2013-1-30
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:8 
关于循环链表的合并
不知道如何贴图片,口述好了,有两个循环链表AB,现在要将循环链表B的头接在循环链表A的尾,rearA是A表的尾指针,rearB是B表的尾指针

代码:
程序代码:
p = rearA->next ;                /* 保存A表的头结点 */
rearA->next = rearB->next->next ;      /* 将本是指向B表的第一个结点(不是头结点)赋值给rearA->next */ 
rearB->next = p ;                      /* 将远A表的头结点赋值给rearB->next */
free(p) ;                              /* 释放p */


///////////////////////////////////////
我不理解最后为什么要free(p),因为第一行代码这样赋值过:p = rearA->next,那这样不是相当于把A链表的头结构释放了,不是应该要释放B链表的头结构么。
搜索更多相关主题的帖子: 图片 如何 
2014-07-16 17:23
果沫
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:198
专家分:960
注 册:2013-1-30
收藏
得分:0 
回复 2 楼 funyh250
free(p)不是释放p所指向的空间么,p所指的就是A的头结构,这样不是把A的头结构给释放了么,指针的话不用了直接p = NULL ;不就行了么
2014-07-16 19:29
果沫
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:198
专家分:960
注 册:2013-1-30
收藏
得分:0 
回复 4 楼 funyh250
还要分配内存存一整个结点?
只是将那个rearA->next的这个指针赋值给p啊,没有申请一段内存去存这个结点啊,然后当合并完毕后,p还是指向rearA->next这里,也就是A的头结点,这样直接free(p)不就相当于把头结点的空间给释放了么,指针如果用完了直接p = NULL ;不就可以了么?    还是没搞懂啊~
2014-07-16 20:03
果沫
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:198
专家分:960
注 册:2013-1-30
收藏
得分:0 
回复 6 楼 TonyDeng
这个是《大话数据结构》上的内容,恩,我是觉得这个代码有问题,没敢轻易相信,但又不敢轻易断定那就是错的,我只是怕万一有个什么特殊用法我没理解,所以来找找答案~   那这样是代码错了吗?
2014-07-16 20:13
果沫
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:198
专家分:960
注 册:2013-1-30
收藏
得分:0 
回复 8 楼 TonyDeng
恩,那应该这就是个错误的吧,我分析下来的话,因为第一条代码赋值是 p = rearA->next ;   在中途没有改变过p的指向,最后释放p所指内存的话也就是释放的是rearA->next,也就是头结构,所以我推断应该释放错了
2014-07-16 20:18
果沫
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:198
专家分:960
注 册:2013-1-30
收藏
得分:0 
回复 10 楼 TonyDeng
恩,书上之贴出了这一段代码,没有什么其他的,但是告诉了我rearA是个尾指针,所以rearA->next应该指向头结构,既然是个表中的结点,那就是用malloc分配的,就是说是一个可以释放的空间,但是不需要去释放这段空间,这段还有用,A的头结构并没有在合并后被删除,而被删除的是B的头结构,所以应该是free错了
2014-07-16 20:24
果沫
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:198
专家分:960
注 册:2013-1-30
收藏
得分:0 
回复 12 楼 TonyDeng
刚刚突然发现这本书真的有错误,在百度上指出来了:
////////////////////
2.38★★ P81,第一行代码,“rearB->next=p; free(p);” 应该在这两句上方加一句“q=rearB->next; ”(即在四句代码的中间增加一句),并修改最后的“free(p);"为“free(q); /*释放q*/ ” (siatliuliu1 提供)
////////////////////
恩恩~~~ 谢谢指导~~   授之以鱼不如授之以渔对吧~这个问题我已经弄明白了~
2014-07-16 20:28
果沫
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:198
专家分:960
注 册:2013-1-30
收藏
得分:0 
回复 15 楼 TonyDeng
恩恩~   thank you ~
2014-07-16 20:37
果沫
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:198
专家分:960
注 册:2013-1-30
收藏
得分:0 
回复 17 楼 TonyDeng
快了= =   这个问题纠结很久。。。结果是个印刷错误。。。

因为还算是学习阶段,自己也没太大信心一口肯定书上有误。。。所以发现问题暂时先不相信= =,然后到处找解决。。。。这种印刷问题感觉挺坑人的
2014-07-16 20:54
快速回复:关于循环链表的合并
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012570 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved