新闻中心

c++ 链表反转代码 c++单链表反转算法

2025-11-28
浏览次数:
返回列表
链表反转通过调整节点指针实现,提供迭代和递归两种方法。1. 定义节点结构;2. 迭代法用三个指针逐个翻转;3. 递归法从后往前调整指针;4. 测试示例创建链表并反转输出。

c++ 链表反转代码 c++单链表反转算法

链表反转是C++数据结构中的经典问题,核心思路是通过调整每个节点的指针方向来实现反转。下面给出一个完整的单链表反转实现,包含定义、创建、反转和打印操作。

单链表节点定义

首先定义链表节点结构:

struct ListNode {
    int val;
    ListNode* next;
    ListNode(int x) : val(x), next(nullptr) {}
};

迭代法反转链表

使用三个指针(prev, curr, next)逐个翻转指向:

ListNode* reverseList(ListNode* head) {
    ListNode* prev = nullptr;
    ListNode* curr = head;
    while (curr != nullptr) {
        ListNode* next = curr->next;  // 保存下一个节点
        curr->next = prev;            // 反转当前节点指针
        prev = curr;                  // 移动 prev 前进一步
        curr = next;                  // 移动 curr 前进一步
    }
    return prev;  // 新的头节点
}

递归法反转链表

递归到底部后,从后往前调整指针:

N世界 N世界

一分钟搭建会展元宇宙

N世界 138 查看详情 N世界
ListNode* reverseListRecursive(ListNode* head) {
    if (head == nullptr || head->next == nullptr) {
        return head;
    }
    ListNode* newHead = reverseListRecursive(head->next);
    head->next->next = head;
    head->next = nullptr;
    return newHead;
}

完整测试示例

构建一个简单链表 1->2->3->4 并进行反转:

#include <iostream>
using namespace std;
<p>// 打印链表
void printList(ListNode* head) {
while (head) {
cout << head->val << " ";
head = head->next;
}
cout << endl;
}</p><p>int main() {
// 创建链表 1->2->3->4
ListNode* head = new ListNode(1);
head->next = new ListNode(2);
head->next->next = new ListNode(3);
head->next->next->next = new ListNode(4);</p><pre class='brush:php;toolbar:false;'>cout << "原链表: ";
printList(head);

head = reverseList(head);  // 反转

cout << "反转后: ";
printList(head);

return 0;

}

输出结果为:
原链表: 1 2 3 4
反转后: 4 3 2 1

两种方法时间复杂度都是 O(n),空间上迭代法 O(1),递归法 O(n) 因为调用栈。实际开发中推荐使用迭代法,更稳定且节省内存。

基本上就这些。

以上就是c++++ 链表反转代码 c++单链表反转算法的详细内容,更多请关注其它相关文章!


# 推荐使用  # 天河纪录片网站建设  # 网站推广太过于广泛  # 云南移动端seo教程  # 洛阳百度seo关键词排名技术  # 从化媒体整合营销推广  # 抖音seo方案落地  # 网站如何推广排名更靠前  # 网站分析及优化方法论文  # 高明外贸网站推广公司  # 黄石网站建设软件开发  # 中文网  # 相关文章  # node  # 与其他  # 都是  # 如何使用  # 两种  # 数据结构  # 链表  # 递归  # stream  # ios  # c++  # ai  #  


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 响应式图片在网页设计中的正确实现方法  漫蛙MANWA漫画主页官方入口 漫蛙漫画最新在线阅读地址  如何创建没有密码的Windows本地账户_跳过微软账户登录的技巧【教程】  智慧团建扫码登录入口 智慧团建扫码登录入口官网版​  Lar*el的路由模型绑定怎么用_Lar*el Route Model Binding简化控制器逻辑  抖音隐秘迷城小游戏入口_ 抖音冒险解谜小游戏秒玩  C++的std::forward_list怎么用_C++ STL中单向链表容器的特点与应用  浏览器打开即用 美图秀秀网页版入口  PowerPoint如何制作滚动字幕结尾彩蛋_PowerPoint路径动画实现平滑滚动字幕效果  聚水潭ERP登录页面入口 聚水潭ERP官网登录界面  微信群消息显示延迟如何解决 微信群消息刷新优化方法  Win11怎么用U盘重装系统 Win11制作启动盘并重装系统完整教程【详解】  搜狗浏览器如何使用密码生成器创建强密码 搜狗浏览器内置密码安全工具  2025-2030年全球乘用车销量预测:新能源成增长主力  微博网页版直接访问 微博网页版账号管理快速入口  win11开机启动修复循环怎么办 Win11无法进入系统高级启动解决方法【修复】  Tabulator表格日期时间排序问题及自定义解决方案  汽水音乐网页版使用入口_汽水音乐电脑版播放指南  mysql密码锁定怎么解锁_mysql密码锁定解锁后修改密码步骤  12306怎么选座位选到安静区_12306选座安静区域选择策略  XML中包含HTML标签导致解析错误? 正确嵌入非XML数据的两种方法  LocoySpider如何部署到云服务器_LocoySpider云部署的远程配置  Win10系统怎么查看已安装更新_Win10卸载有问题的更新补丁  《刺客信条:影》PS5 Pro和Switch 2画面对比  C++如何实现一个装饰器模式_C++设计模式之动态地给对象添加额外职责  Angular中单选按钮的正确使用与常见陷阱解析  钉钉视频会议画面卡顿如何解决 钉钉会议画面优化方法  痛风发作了怎么办? 快速止痛和后期饮食调理  自定义Bag-of-Words实现:处理带负号的词汇权重  小红书商家版怎样在笔记嵌入商品卡路径_小红书商家版在笔记嵌入商品卡路径【挂载教程】  steam官方网页快速访问 steam账号注册全流程  支付宝碰一碰设备是REDMI手机吗 博主拆机辟谣:处理器、内存都不一样  Go语言中JSON数据解析与字段访问教程  学习通网页版快速入口 学习通官网网页版直接打开  Windows电脑怎么截图最方便_系统自带截图工具的5种神仙用法【技巧】  在J*a中如何在J*a中使用异常机制记录错误日志_异常日志实践经验  outlook中文官网入口地址 outlook官方中文版直达首页链接  C++20的source_location是什么_C++在编译期获取源码位置信息用于日志和断言  如何在低配置电脑上搭建轻量级J*a环境_占用更小的环境选择技巧  J*a最大堆Heapify方法修复:索引计算与边界条件深度解析  CSS如何设置hover状态颜色_hover伪类调整背景或文字颜色  Spring Boot嵌入式服务器与J*a EE:功能支持深度解析  地铁跑酷免费秒玩入口链接 地铁跑酷小游戏免费秒玩网站  台积电1.4nm工艺A14瞄准2028:10年来性能提升80%  sublime侧边栏怎么增强功能_SideBarEnhancements for sublime安装与配置  深入理解J*aScript Promise异步执行与微任务队列  Vue.js 图片显示异常排查:理解应用挂载范围与DOM ID唯一性  新三国志曹操传110级星符试炼夏侯渊极难攻略  优酷会员付费后没到账怎么办_优酷会员充值异常及解决方法  Eclipse怎么运行工程_Eclipse工程运行配置说明 

搜索