You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于指针按引用传递的疑问——单链表反转场景分析

为什么单链表反转函数传Node*不行,必须传Node*&?

这问题真的戳中了C++指针参数传递的核心坑点,很多刚上手的同学都会在这里卡壳!我来给你掰扯清楚:

先搞懂C++的参数传递逻辑

在C++里,参数默认是值传递——也就是说,当你把一个变量传给函数时,函数会创建这个变量的副本,函数内部对副本的修改完全不会影响到原变量。

放到你的场景里:

  • 当你用void reverseLinkedList(Node* head)时,这里的head是main函数里原指针的副本。你在函数最后写的head = prev;,只是把这个副本的指向改成了新的头节点(原链表的尾),但main里的原指针还是死死指着原来的头节点(也就是1)。

结合你的代码具体分析

原链表是1->2->3:

  1. 用值传递时,函数内部确实完成了链表的反转操作——把每个节点的next都改成了前一个节点,最后prev指向3(新的头)。
  2. 但函数里的head副本被改成3后,main里的原head还是指向1,而此时1的next已经被改成NULL了!所以你打印的时候,只能输出1,然后就因为next是NULL停止了。
  3. 而当你用Node*& head(指针的引用)时,函数里的head就是main里原指针的别名——相当于直接操作原变量。最后head = prev;会把main里的原指针直接改成指向3,这样打印的时候就能遍历整个反转后的3->2->1了。

补充:还有另一种写法

除了传指针的引用,你也可以传指针的指针(Node** head),效果是一样的。比如函数里最后写*head = prev;,也是直接修改原指针的指向。


内容的提问来源于stack exchange,提问作者Ayumu Kasugano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:34:15