用c++写一个单链表反转的函数,函数的传入参数为list l
时间: 2024-09-16 18:03:24 浏览: 85
C语言的可变参数表函数的设计.doc-综合文档
在C++中,你可以创建一个函数来反转一个单链表。这里是一个简单的示例,函数名为`reverseList`,它接受一个指向头节点的指针作为输入参数:
```cpp
#include <iostream>
using namespace std;
// 定义链表节点结构
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
// 反转链表的辅助函数
ListNode* reverseHelper(ListNode* head) {
if (head == nullptr || head->next == nullptr)
return head; // 如果链表为空或只有一个元素,直接返回
ListNode* prev = nullptr; // 前驱节点,初始化为NULL
ListNode* curr = head; // 当前节点,初始化为头结点
while (curr != nullptr) {
ListNode* temp = curr->next; // 保存当前节点的下一个节点
curr->next = prev; // 将当前节点的next指向前一个节点
prev = curr; // 更新前驱节点为当前节点
curr = temp; // 更新当前节点为下一个节点
}
return prev; // 返回新的头结点
}
// 主函数,反转并打印链表
void printList(ListNode* head) {
ListNode* temp = head;
while (temp != nullptr) {
cout << temp->val << " ";
temp = temp->next;
}
cout << endl;
}
// 反转链表并打印原样
void reverseAndPrint(ListNode* &l) {
ListNode* newHead = reverseHelper(l);
cout << "Reversed List: ";
printList(newHead);
l = newHead; // 更新原始链表的头结点
}
int main() {
ListNode* l = new ListNode(1); // 创建一个包含1的链表
l->next = new ListNode(2);
l->next->next = new ListNode(3);
cout << "Original List: ";
printList(l);
reverseAndPrint(l); // 反转链表
return 0;
}
```
这个程序首先定义了一个链表节点结构,然后实现了`reverseHelper`函数来递归地反转链表。`reverseAndPrint`函数则是用于实际操作并打印反转后的链表。最后,在主函数`main`中创建了一个例子链表,并展示了如何调用`reverseAndPrint`。
阅读全文