首页 > 后端开发 > C++ > 正文

c++中如何反转链表_c++链表反转实现方法

穿越時空
发布: 2025-10-03 12:20:02
原创
714人浏览过
反转链表有两种主要方法:迭代法和递归法。迭代法使用三个指针遍历链表,时间复杂度O(n),空间复杂度O(1);递归法通过递归调用到达链表尾部后逐层反转,时间复杂度O(n),空间复杂度O(n)。推荐在生产环境中使用迭代法,递归法更利于理解递归思想。测试示例显示输入链表1→2→3经反转后输出为3 2 1,验证了算法正确性。实际应用中需注意内存管理以避免泄漏。

c++中如何反转链表_c++链表反转实现方法

在C++中反转链表是一个常见的数据结构操作,主要用于单向链表。实现方式主要有两种:迭代法和递归法。下面详细介绍这两种方法的实现思路和代码。

定义链表节点结构

在开始之前,先定义一个基本的链表节点结构:

// 单链表节点定义
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->next; // 保存下一个节点
        curr->next = prev; // 反转当前指针
        prev = curr; // 移动 prev 前进
        curr = nextTemp; // 移动 curr 前进
    }
    return prev; // prev 最终指向原链表的最后一个节点,即新头节点
}

这种方法时间复杂度为 O(n),空间复杂度为 O(1),效率高且易于理解。

方法二:递归法反转链表

利用递归回到链表末尾,然后逐层反转指针。

ListNode* reverseList(ListNode* head) {
    // 递归终止条件
    if (head == nullptr || head->next == nullptr) {
        return head;
    }

    ListNode* newHead = reverseList(head->next); // 递归到末尾
    head->next->next = head; // 反转指针
    head->next = nullptr; // 当前节点指向空,避免环

    return newHead; // 返回新的头节点
}

爱图表
爱图表

AI驱动的智能化图表创作平台

爱图表 99
查看详情 爱图表

立即学习C++免费学习笔记(深入)”;

递归方法逻辑清晰,但使用了函数调用,空间复杂度为 O(n),对于很长的链表可能引发栈溢出。

使用示例与测试

可以创建简单链表并调用上述函数进行测试:

int main() {
    ListNode* head = new ListNode(1);
    head->next = new ListNode(2);
    head->next->next = new ListNode(3);

    head = reverseList(head); // 反转链表

    // 打印结果:3 2 1
    ListNode* p = head;
    while (p) {
        std::cout << p->val << " ";
        p = p->next;
    }
    return 0;
}

输出结果为:3 2 1,说明链表已成功反转。

基本上就这些。迭代法更推荐用于生产环境,递归法适合理解递归思想。实际应用中注意内存释放,避免泄漏。

以上就是c++++中如何反转链表_c++链表反转实现方法的详细内容,更多请关注php中文网其它相关文章!

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号