信息发布→ 登录 注册 退出

C++如何实现一个单向链表的反转?(面试题示例)

发布时间:2025-12-12

点击量:
迭代法是最稳妥解法:用prev、curr、nextTemp三指针边遍历边调整next指向,时间O(n)、空间O(1),核心是让当前节点指向已处理的前驱,最终prev即新头。

c++如何实现一个单向链表的反转?(面试题示例)

用三个指针迭代翻转,时间复杂度 O(n),空间复杂度 O(1) —— 这是面试中最稳妥、最常被期待的解法。

核心思路:边遍历边调整指针方向

原链表是 head → node1 → node2 → node3 → nullptr,反转后要变成 nullptr ← head ← node1 ← node2 ← node3(此时 node3 成为新头)。关键不是“把节点搬来搬去”,而是让每个节点的 next 指向前一个已处理的节点。

需要三个变量配合:

  • prev:记录「当前节点的前一个节点」,初始为 nullptr
  • curr:当前正在处理的节点,初始为 head
  • nextTemp:暂存 curr->next,避免断链后找不到后续

代码实现(带注释)

struct ListNode {
    int val;
    ListNode* next;
    ListNode() : val(0), next(nullptr) {}
    ListNode(int x) : val(x), next(nullptr) {}
};
<p>ListNode<em> reverseList(ListNode</em> head) {
ListNode<em> prev = nullptr;
ListNode</em> curr = head;</p><pre class="brush:php;toolbar:false;">while (curr != nullptr) {
    ListNode* nextTemp = curr->next; // 先保存下一个节点
    curr->next = prev;               // 当前节点指向前面
    prev = curr;                     // prev 前进一步
    curr = nextTemp;                 // curr 前进一步
}

return prev; // prev 最终停在原链表尾,即新链表头

}

情感家园企业站5.0 多语言多风格版 情感家园企业站5.0 多语言多风格版

一套面向小企业用户的企业网站程序!功能简单,操作简单。实现了小企业网站的很多实用的功能,如文章新闻模块、图片展示、产品列表以及小型的下载功能,还同时增加了邮件订阅等相应模块。公告,友情链接等这些通用功能本程序也同样都集成了!同时本程序引入了模块功能,只要在系统默认模板上创建模块,可以在任何一个语言环境(或任意风格)的适当位置进行使用!

情感家园企业站5.0 多语言多风格版 0 查看详情 情感家园企业站5.0 多语言多风格版

常见易错点提醒

  • 忘记保存 curr->next 就直接改 curr->next = prev,导致后续节点丢失
  • 返回了 curr(循环结束时为 nullptr)而不是 prev
  • 没处理空链表(head == nullptr)的情况 —— 实际上上述代码天然支持,无需额外判断
  • 递归写法虽简洁但有栈溢出风险,面试中建议先写迭代,再提递归作为补充

递归版本(理解用,非首选)

思想:先反转 head->next 开始的子链,再把 head 接到子链尾部。需注意边界和连接逻辑:

ListNode* reverseList(ListNode* head) {
    if (!head || !head->next) return head;
<pre class="brush:php;toolbar:false;">ListNode* newHead = reverseList(head->next);
head->next->next = head;
head->next = nullptr;
return newHead;

}

基本上就这些。写对迭代三步(存、改、移)就不容易错。

以上就是C++如何实现一个单向链表的反转?(面试题示例)的详细内容,更多请关注其它相关文章!


相关文章: 俄罗斯浏览器官网直达链接 俄罗斯浏览器最新在线入口导航  漫蛙漫画网页端入口 漫蛙2官方正版漫画站点  css链接悬停下划线样式如何自定义_使用::after结合content和transition  Linux如何构建多环境配置管理_Linux多环境配置方案  实现分段式页面滚动导航:CSS与J*aScript教程  解决PHP集成HTML后CSS和图片路径加载问题的指南  护手霜蹭到袖口上了如何清洗? 怎样避免留下一圈油印?  学习通在线学习平台 学习通网页版直接进入课程中心  海棠账号登录入口_登录海棠账户同步阅读记录  最新韩小圈网页版登录入口_官网在线观看官方链接  C++如何实现线程池_C++11手动实现一个简单的固定大小线程池  使用 Pandas 高效处理 .dat 文件:数据清洗与数值计算实战  J*aScript打印功能_j*ascript输出控制  PHP表单提交后函数重复执行的解决方案:管理$_POST数据  Steam官网入口直达 Steam注册及登录步骤  快速CSGO开箱网站指南 CSGO开箱平台推荐  LINUX的I/O重定向是什么_深入理解LINUX中 >、>> 与 < 的区别  J*aScript中localStorage数据的获取、清洗与格式化教程  steam官方网页快速访问 steam账号注册全流程  Python模块化编程:有效管理依赖与避免循环引用  Win11如何使用Windows Sandbox Win11沙盒功能开启与使用教程【详解】  绝地鸭卫平a核爆刀流玩法攻略  动漫岛观看全网网 动漫岛在线正版动漫入口  如何优雅地扩展SprykerGlue后端API授权逻辑,使用spryker/glue-backend-api-application-authorization-connector-extension  Spring Boot内嵌服务器与J*a EE全栈特性:选择与部署策略  2306选座时如何选靠窗位置_12306选座靠窗座位查看方法解析  Python中高效访问嵌套字典与列表中的键值对  知乎APP怎么管理已购盐选内容_知乎APP盐选内容购买记录与查看方法  C++如何生成随机数_C++ random库使用方法与范围设置  2025AO3夸克浏览器通道_AO3手机HTTPS安全入口分享  Golang如何实现状态模式管理对象状态_Golang State模式实现技巧  QQ邮箱网页版入口 QQ邮箱官方邮箱登录通道  qq浏览器如何查看和导出已保存的密码 qq浏览器密码管理器数据备份教程  在WordPress中通过REST API访问受BasicAuth保护的站点内容  哔哩哔哩忘记密码了怎么找回_哔哩哔哩密码找回方法  QQ邮箱网页版邮箱入口 QQ邮箱官方登录平台  UE5.7引擎表现爆炸优化无敌!5090跑4K稳定60FPS  高德地图沿途添加点失败如何解决 高德多点规划方法  将PCM16音频数据转换为W*并编码为Base64教程  台积电1.4nm工艺A14瞄准2028:10年来性能提升80%  在React函数组件中利用原生HTML5进行邮箱地址验证  深入理解与实现最大堆的Heapify过程:常见错误与修正  Lar*el Form Request 中唯一性验证更新操作的正确实践  Windows电脑怎么截图最方便_系统自带截图工具的5种神仙用法【技巧】  UC浏览器如何安装插件 UC浏览器添加扩展程序详细教程【进阶】  字由网在线版登录地址 字由网网页版安全入口  vivo云服务网页版登录 怎么登录vivo云服务网页版  《主播少女的秘密账号迷宫》首支宣传片  天眼查企业查询官网入口 天眼查官方网页版查询  QQ官网正版登录链接 QQ在线登录入口最新 

在线客服
服务热线

服务热线

4008988990

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!