用c++写一个单链表反转的函数,函数头为void reverse(List L)
时间: 2024-09-16 08:03:27 浏览: 69
C++ reverse介绍及使用
在C++中,你可以通过迭代或递归的方式来实现单链表的反转。这里我将给出一种常见的迭代方法:
```cpp
#include <iostream>
// 定义单链表节点结构体
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
// 反转链表函数
void reverse(ListNode*& L) {
ListNode* prev = nullptr; // 初始化前驱指针为nullptr
ListNode* curr = L; // 当前指针初始指向链表头部
// 遍历整个链表
while (curr != nullptr) {
// 记录当前节点的下一个节点
ListNode* nextTemp = curr->next;
// 将当前节点的next指向前驱节点,完成一次反转
curr->next = prev;
// 更新前驱和当前节点
prev = curr;
curr = nextTemp;
}
// 最后返回新的头节点
L = prev;
}
// 测试示例
int main() {
ListNode* L = new ListNode(1);
L->next = new ListNode(2);
L->next->next = new ListNode(3);
std::cout << "Original list: ";
printList(L); // 自定义打印链表函数
reverse(L);
std::cout << "\nReversed list: ";
printList(L);
return 0;
}
```
在这个例子中,`printList`是一个辅助函数用于打印链表。注意,这个`reverse`函数会直接修改传入的链表L。
阅读全文