C++如何反转链表_C++ list reverse方法与算法实现

admin 百科 14
使用std::list::reverse可直接反转双向链表;手动反转单链表常用三指针迭代法或递归法,前者时间O(n)空间O(1),后者简洁但占栈空间。

C++如何反转链表_C++ list reverse方法与算法实现-第1张图片-佛山资讯网

在C++中,反转链表是一个常见的数据结构操作。根据使用的是标准库容器还是自定义的链表结构,实现方式有所不同。本文将介绍两种主要方法:使用 std::list 的内置 reverse 方法,以及手动实现单链表的反转算法。

使用 std::list 的 reverse 方法

如果你使用的是 C++ 标准库中的 std::list(双向链表),可以直接调用其成员函数 reverse() 来反转元素顺序。

这个方法高效且无需手动编写逻辑,底层由标准库优化实现。

#include <list>
#include <iostream>
<p>int main() {
std::list<int> lst = {1, 2, 3, 4, 5};</p><pre class='brush:php;toolbar:false;'>lst.reverse(); // 直接反转

for (const auto& val : lst) {
    std::cout << val << " ";
}
// 输出: 5 4 3 2 1
return 0;

登录后复制

}

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

注意:该方法仅适用于 std::list,不适用于 std::vector 或原生指针实现的链表。若要反转 vector,可使用 std::reverse(vec.begin(), vec.end())

手动实现单链表反转(算法)

在面试或实际算法题中,更常见的是对一个手写单向链表进行反转。此时需要自己实现反转逻辑,通常采用“三指针法”迭代完成。

假设链表节点定义如下:

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

登录后复制

反转函数实现:

标签: c++ 链表反转 node ai ios stream 标准库

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~