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

反转链表有两种主要方法:迭代法和递归法。迭代法使用三个指针遍历链表,时间复杂度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; // 返回新的头节点
}

立即学习“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 val         p = p->next;
    }
    return 0;
}

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1477200.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
c++怎么实现一个简单的socket通信_c++ socket通信实现方法
上一篇 2025年12月19日 01:49:40
c++中如何实现动态规划背包问题_c++动态规划背包问题实现方法
下一篇 2025年12月19日 01:49:50

相关推荐

发表回复

登录后才能评论
关注微信