使用std::list::reverse可直接反转双向链表;手动反转单链表常用三指针迭代法或递归法,前者时间O(n)空间O(1),后者简洁但占栈空间。
在C++中,反转链表是一个常见的数据结构操作。根据使用的是标准库容器还是自定义的链表结构,实现方式有所不同。本文将介绍两种主要方法:使用 std::list 的内置 reverse 方法,以及手动实现单链表的反转算法。
如果你使用的是 C++ 标准库中的 std::list(双向链表),可以直接调用其成员函数 reverse() 来反转元素顺序。
这个方法高效且无需手动编写逻辑,底层由标准库优化实现。
#include#include
int main() { std::list
lst = {1, 2, 3, 4, 5}; lst.reverse(); // 直接反转 for (const auto& val : lst) { std::cout zuojiankuohaophpcnzuojiankuohaophpcn val zuojiankuohaophpcnzuojiankuohaophpcn " "; } // 输出: 5 4 3 2 1 return 0;}
注意:该方法仅适用于 std::list,不适用于 std::vector 或原生指针实现的链表。若要反转 vector,可使用 std::reverse(vec.begin(), vec.end())。
在面试或实际算法题中,更常见的是对一个手写单向链表进行反转。此时需要自己实现反转逻辑,通常采用“三指针法”迭代完成。
假设链表节点定义如下:
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
反转函数实现:
ListNode* reverseList(ListNode* head) {
ListNode* prev = nullptr;
ListNode* curr = head;
while (curr != nullptr) {
ListNode* nextTemp = curr-youjiankuohaophpcnnext; // 保存下一个节点
curr-youjiankuohaophpcnnext = prev; // 反转当前节点指针
prev = curr; // 移动 prev 前进
curr = nextTemp; // 移动 curr 前进
}
return prev; // 新的头节点}
该算法时间复杂度为 O(n),空间复杂度为 O(1),是效率较高的解法。
也可以用递归思路实现链表反转,虽然代码更简洁,但会占用 O(n) 的调用栈空间。
ListNode* reverseListRecursive(ListNode* head) {
if (!head || !head->next) {
return head;
}
ListNode* newHead = reverseListRecursive(head-youjiankuohaophpcnnext);
head-youjiankuohaophpcnnext-youjiankuohaophpcnnext = head;
head-yo
ujiankuohaophpcnnext = nullptr;
return newHead;
}
递归的核心思想是:先将当前节点之后的部分完全反转,然后调整当前节点与后续节点的关系,最终返回新的头节点。
基本上就这些。对于日常开发,优先使用 std::list::reverse();在算法练习中,掌握迭代和递归两种手动实现方式更有价值。理解指针的变换过程是关键。不复杂但容易忽略细节,比如空指针判断和连接断开顺序。
# c++
# node
# 栈
# ai
# ios
# stream
# 标准库
# 成员函数
# 递归
# 指针
# 数据结构
# 空指针
# 算法
# 链表
# 的是
# 两种
# 是一个
# 迭代
# 如果你
# 可以用
# 适用于
# 较高
相关文章:
平台云上自助建站如何快速打造专业网站?
网站制作的步骤包括,正确网址格式怎么写?
如何在万网开始建站?分步指南解析
如何在宝塔面板创建新站点?
浅谈Javascript中的Label语句
如何在IIS7中新建站点?详细步骤解析
网站插件制作软件免费下载,网页视频怎么下到本地插件?
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
如何彻底卸载建站之星软件?
php json中文编码为null的解决办法
义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?
如何快速查询网站的真实建站时间?
如何在自有机房高效搭建专业网站?
如何通过免费商城建站系统源码自定义网站主题与功能?
如何用PHP快速搭建高效网站?分步指南
小型网站制作HTML,*游戏网站怎么搭建?
如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?
网站设计制作企业有哪些,抖音官网主页怎么设置?
如何通过PHP快速构建高效问答网站功能?
如何在Windows环境下新建FTP站点并设置权限?
桂林网站制作公司有哪些,桂林马拉松怎么报名?
高端建站如何打造兼具美学与转化的品牌官网?
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
如何用花生壳三步快速搭建专属网站?
零服务器AI建站解决方案:快速部署与云端平台低成本实践
如何获取上海专业网站定制建站电话?
独立制作一个网站多少钱,建立网站需要花多少钱?
北京企业网站设计制作公司,北京铁路集团官方网站?
小型网站建站如何选择虚拟主机?
较简单的网站制作软件有哪些,手机版网页制作用什么软件?
如何选择域名并搭建高效网站?
企业网站制作公司网页,推荐几家专业的天津网站制作公司?
如何制作算命网站,怎么注册算命网站?
开封网站制作公司,网络用语开封是什么意思?
江苏网站制作公司有哪些,江苏书法考级官方网站?
C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换
如何获取免费开源的自助建站系统源码?
linux top下的 minerd 木马清除方法
常州自助建站费用包含哪些项目?
h5网站制作工具有哪些,h5页面制作工具有哪些?
php8.4新语法match怎么用_php8.4match表达式替代switch【方法】
Swift中swift中的switch 语句
武清网站制作公司,天津武清个人营业执照注销查询系统网站?
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
建站之星如何一键生成手机站?
如何在Tomcat中配置并部署网站项目?
网站制作模板下载什么软件,ppt模板免费下载网站?
建站主机选哪家性价比最高?
临沂网站制作企业,临沂第三中学官方网站?
建站之星展会模版如何一键下载生成?
*请认真填写需求信息,我们会在24小时内与您取得联系。