C++ 为什么简单的链表反向函数总是返回最后一个节点而不是第一个节点

C++ 为什么简单的链表反向函数总是返回最后一个节点而不是第一个节点,c++,c,C++,C,我为链表编写了一个简单的反向函数,如下所示: typedef结构节点 { int数据; _节点*下一步; }节点; 无效打印(节点*头) { 节点*启动; 开始=头部; while(启动) { printf(“%d”,开始->数据); 开始=开始->下一步; } } 节点*反向(节点*头部) { NODE*prev=NULL; 节点*curr=头部; while(curr) { 节点*temp=curr->next; 当前->下一步=上一步; 上一次=当前; 电流=温度; } 头=上一个; 回流

我为链表编写了一个简单的反向函数,如下所示:

typedef结构节点
{
int数据;
_节点*下一步;
}节点;
无效打印(节点*头)
{
节点*启动;
开始=头部;
while(启动)
{
printf(“%d”,开始->数据);
开始=开始->下一步;
}
}
节点*反向(节点*头部)
{
NODE*prev=NULL;
节点*curr=头部;
while(curr)
{
节点*temp=curr->next;
当前->下一步=上一步;
上一次=当前;
电流=温度;
}
头=上一个;
回流头;
}
int main()
{
节点*头=新节点;
NODE*node1=新节点;
NODE*node2=新节点;
头部->数据=1;
节点1->数据=2;
节点2->数据=3;
head->next=节点1;
node1->next=node2;
node2->next=NULL;
反向(头部);
打印头;
getchar();
删除标题;
删除节点1;
删除节点2;
head=NULL;
node1=NULL;
node2=NULL;
返回1;
}
我发现输出总是
1
。我的问题是为什么
reverse
函数后面的头指针总是指向值为
1
的节点。我已经在
reverse
函数中将上一个指针指定给头部指针

但是如果我在下面更改,输出就正确了

reverse(head);


因为
reverse
函数中的
head
变量与
main
函数中的
head
变量不同


reverse
中指定
head
变量不会改变
main

head
变量的值。如果您编写了此代码,那么您肯定知道为什么
reverse
被编写为返回值。函数返回新的head。它不(不能)修改您传递给它的值的变量的值。(指针没有什么特别之处。)您可以将参数的名称反向更改为head\u copy
\u NODE
标识符保留给语言实现。你应该重新命名你的类。
ಠ_ಠ节点
head = reverse(head);