| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 986 人关注过本帖
标题:链表的形参疑问
只看楼主 加入收藏
tangtangt
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:46
专家分:146
注 册:2012-1-22
结帖率:100%
收藏
已结贴  问题点数:40 回复次数:5 
链表的形参疑问
今天遇到一个对无头结点链表的倒置问题,发现形参为(pNode L)不行,变成(pNode *L )就行了,个人觉得应该形参是指向首节点指针的指针才能真正改变指向首节点的指针的指向,那么对于无头结点链表是否对于插入,删除等改变链表内部指针指向的函数形参都是要以指向指针的指针作为形参呢?
然后对于有头结点的链表,我发现函数都只要以头结点为形参,是不是因为本身头结点也可以视为一个指向首节点指针的指针,所以才能改变链表的内部结构?
表达能力不好,大家见谅。。。
搜索更多相关主题的帖子: 能力 
2012-03-28 21:22
魏新建
Rank: 2
等 级:论坛游民
帖 子:55
专家分:86
注 册:2012-2-17
收藏
得分:0 
能把你那个代码贴上来吗?真是看不懂你的问题。
2012-03-28 22:25
tangtangt
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:46
专家分:146
注 册:2012-1-22
收藏
得分:0 
回复 2楼 魏新建
这个是个理解问题,我很难用一段代码表示。。。
举例说对于链表倒置来说
typedef struct node
{
    int data;
    struct node * next;
}* pNode;
对没有头结点的链表 void reverse_list( pNode *l )形参是pNode *l是这种,而像链表排序,遍历之类的函数形参却是pNode l;
如果对于有头结点的链表,定义一个头结点 pNode pHead,倒置函数就可以写 void reverse_list( pNode pHead ),而且对于插入,删除,遍历函数形参也可以用pNode pHead;

我由于同时看好几本书,每本书上链表写法都有点不一样,所以比较纠结。。。虽然做多了,多试几种不同的写法,也能把题做出来,但理解上还是有点疑惑。
希望有人能深入讲一讲对于有/无头结点的链表中函数形参类型的问题。
2012-03-29 12:30
于祥
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:5
帖 子:1047
专家分:4132
注 册:2011-4-24
收藏
得分:0 
我也是理解的不是很好,求解释

最基础的往往是你最容易忽略的!
2012-03-29 12:48
魏新建
Rank: 2
等 级:论坛游民
帖 子:55
专家分:86
注 册:2012-2-17
收藏
得分:40 
其实你调用函数的时候,此函数会另外开辟一块内存,然后把数据复制过来,进行一定的操作。如果你直接把要处理的参数掉进去,就要返回值,如果你想直接改变变量的值,就要调进去变量的指针。不是有一个经典的交换两个变量值的函数的。希望能帮到你。
2012-03-29 16:08
tangtangt
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:46
专家分:146
注 册:2012-1-22
收藏
得分:0 
回复 5楼 魏新建
多谢你的回复。你说的这个我大致也知道,貌似还正好就是从那个交换变量的程序了解的。之前也差不多这样想的。就是学链表都是自己写完以后感觉出来的,书上讲的太少,所以就不太确定。不过我很奇怪为啥都没有什么人谈谈对链表这方面的理解。。。应该不是很难的啊。
2012-03-29 19:48
快速回复:链表的形参疑问
数据加载中...
 
   



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

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