链表反转的两种实现方法为迭代法和递归法。1. 迭代法使用三个指针prev、curr、next,逐个翻转节点指向,最后返回prev作为新头节点。2. 递归法从最后一个节点开始,将后一节点的next指向当前节点,并断开当前节点next,最终返回新的头节点。代码包含完整定义、反转函数及测试示例,构造链表1→2→3→4,反转后输出4 3 2 1,验证正确性。两种方法均需处理空链表或单节点边界情况,避免空指针访问,建议结合图示理解指针变化过程。
链表反转是C++数据结构面试中的高频考点,考察对指针操作和逻辑思维的理解。实现方式主要有迭代法和递归法两种,下面分别给出清晰、可运行的代码实现。
使用三个指针:prev(前一个节点)、curr(当前节点)、next(下一个节点),逐个翻转指针方向。
#includeusing namespace std; // 链表节点定义 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* next = curr->next; // 保存下一个节点 curr->next = prev; // 反转当前指针 prev = curr; // 移动 prev 前进 curr = next; // 移动 curr 前进 } return prev; // 新的头节点}
递归到底部后,从最后一个节点开始重新连接,关键在于将下一个节点的 next 指向当前节点,并断开当前节点的 next。
// 递归反转链表
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,反转后输出结果验证正确性。
// 打印链表
void printList(ListNode* head) {
while (head) {
cout << head->val << " ";
head = head->next;
}
cout << endl;
}
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);
cout zuojiankuohaophpcnzuojiankuohaophpcn "原链表: ";
printList(head);
head = reverseList(head); // 使用迭代法反转
cout zuojiankuohaophpcnzuojiankuohaophpcn "反转后: ";
printList(head);
return 0;
}
上述代码在
主流编译器(如g++)下可直接运行,输出为:
原链表: 1 2 3 4
反转后: 4 3 2 1
基本上就这些。掌握这两种写法,尤其理解指针变化过程,面试中就能从容应对。注意空链表和单节点情况的处理,避免访问空指针。调试时建议画图辅助理解每一步的连接关系。
# c++
# node
# ai
# ios
# stream
# 递归
# 指针
# 数据结构
# 空指针
# 链表
# 两种
# 从容应对
# 就能
# 可直接
# 这两种
# 逻辑思维
# 关键在于
相关文章:
建站之星2.7模板:企业网站建设与h5定制设计专题
在线教育网站制作平台,山西立德教育官网?
微信h5制作网站有哪些,免费微信H5页面制作工具?
如何通过二级域名建站提升品牌影响力?
PHP正则匹配日期和时间(时间戳转换)的实例代码
建站主机功能解析:服务器选择与快速搭建指南
网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?
智能起名网站制作软件有哪些,制作logo的软件?
建站为何优先选择香港服务器?
PHP 500报错的快速解决方法
如何在IIS中新建站点并解决端口绑定冲突?
,交易猫的商品怎么发布到网站上去?
php8.4新语法match怎么用_php8.4match表达式替代switch【方法】
XML的“混合内容”是什么 怎么用DTD或XSD定义
青岛网站建设如何选择本地服务器?
网站制作免费,什么网站能看正片电影?
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
活动邀请函制作网站有哪些,活动邀请函文案?
如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法
C++时间戳转换成日期时间的步骤和示例代码
早安海报制作网站推荐大全,企业早安海报怎么每天更换?
微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?
建站之星安装提示数据库无法连接如何解决?
怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?
网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?
建站主机与服务器功能差异如何区分?
网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?
建站上市公司网站建设方案与SEO优化服务定制指南
c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】
深圳网站制作培训,深圳哪些招聘网站比较好?
济南专业网站制作公司,济南信息工程学校怎么样?
网站制作壁纸教程视频,电脑壁纸网站?
网站专业制作公司有哪些,做一个公司网站要多少钱?
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?
电商网站制作价格怎么算,网上拍卖流程以及规则?
如何快速搭建响应式可视化网站?
如何在西部数码注册域名并快速搭建网站?
湖北网站制作公司有哪些,湖北清能集团官网?
建站之星如何实现PC+手机+微信网站五合一建站?
建站之星各版本价格是多少?
如何安全更换建站之星模板并保留数据?
如何用搬瓦工VPS快速搭建个人网站?
高防服务器如何保障网站安全无虞?
建站之星体验版:智能建站系统+响应式设计,多端适配快速建站
家庭建站与云服务器建站,如何选择更优?
如何在宝塔面板中修改默认建站目录?
建站之星价格显示格式升级,你的预算足够吗?
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
济南网站建设制作公司,室内设计网站一般都有哪些功能?
*请认真填写需求信息,我们会在24小时内与您取得联系。