返回信息流struct node
{
int data;
struct node *next;
};
typedef struct node *linklist;
void reverselink(linklist &head)
{
node *ppre = head;
node *pcur = ppre->next;
node *pnext = NULL;
while(pcur != NULL)
{
pnext = pcur->next;
pcur->next = ppre;
ppre = pcur;
pcur = pnext;
}
head->next = NULL;
head = ppre;
}
//请问各位 在这里&号的的作用是什么 有其他更好的实现方法吗 感谢
这是一条镜像帖。来源:北邮人论坛 / cpp / #77571同步于 2014/3/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
单链表逆置问题
LMY198818
2014/3/18镜像同步24 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
函数参数用&是引用传参的意思。前面有typedef struct node *linklist; 定义了一个node指针类型linklist,本身就是一个指针,你用linklist *head做参数,那么head就是一个指向linklist指针的指针,在这句node *ppre = head;赋值由于ppre和head类型不同报错。
typedef struct node *linklist;
这一句是重定义了node的指针命名方式..
然后linklist &head 这句是引用.引用了一个node指针.(有没有这个&都可以运行成功.可以试试把&去掉.)
你可以尝试在函数内.对head指向另外一个地方..然后跳出函数..再重新遍历链表.这样你就理解那个&做什么用的了.
倒置算法.我给你一个吧.你去试试.我自己现在木有编译环境.
linklist reverselink(linklist first,linklist next)
{
if(next->next != NULL)
{
linklist nnext=next->next;//获取它的下一个节点
next->next=first;
return reverselink(linklist next,linklist nnext);//递归倒置
}
else //最后一个节点了.直接返回这个节点
{
next->next=first;
return next;
}
}
之后调用的时候..就直接这样用
head = reverselink(NULL,head);
有点明白了 感谢
【 在 gdl 的大作中提到: 】
: 函数参数用&是引用传参的意思。前面有typedef struct node *linklist; 定义了一个node指针类型linklist,本身就是一个指针,你用linklist *head做参数,那么head就是一个指向linklist指针的指针,在这句node *ppre = head;赋值由于ppre和head类型不同报错。
linklist是一个指向链表节点的指针,而&是引用的意思,代表引用linklist里存的地址值,由于如果不加&就相当于直接传递linklist里面存的地址值,而值传递会造成很多问题,那么只能用*和&,*的话会有两层指针可读性不好,&引用传递是最好也是最简单的方式。在这个问题中head中存的是引用linklist的地址值,所以在函数内可以当成一个指针,但是在函数间的传递不会出现值传递的问题。
感谢 我在VC6下面将&去掉后 发现不能逆置链表,这是什么原因呢
【 在 tangzehang 的大作中提到: 】
: typedef struct node *linklist;
: 这一句是重定义了node的指针命名方式..
: 然后linklist &head 这句是引用.引用了一个node指针.(有没有这个&都可以运行成功.可以试试把&去掉.)
: ...................
发现问题了..最关键的一句...就是你代码的最后一句
head = ppre;
这一句.注定你要用引用..如果不用引用..你的head出跳出函数后还是原来的地方.
如果去掉&..
让函数return ppre;
之后head = reverselink(head);
非常感谢 明白了
【 在 hlxwin 的大作中提到: 】
: linklist是一个指向链表节点的指针,而&是引用的意思,代表引用linklist里存的地址值,由于如果不加&就相当于直接传递linklist里面存的地址值,而值传递会造成很多问题,那么只能用*和&,*的话会有两层指针可读性不好,&引用传递是最好也是最简单的方式。在这个问题中head中存的是引用linklist的地址值,所以在函数内可以当成一个指针,但是在函数间的传递不会出现值传递的问题。
[em68] 说得完全正确 感谢你
【 在 tangzehang 的大作中提到: 】
: 发现问题了..最关键的一句...就是你代码的最后一句
: head = ppre;
: 这一句.注定你要用引用..如果不用引用..你的head出跳出函数后还是原来的地方.
: ...................