用c++写一段代码实现 将一个链表的各个元素关系反转的函数。 函数原型: ListNode* reverseList(ListNode *h) 例如: 链表原本为 1->6->2->8 将其反转为 8->2->6->1
时间: 2024-09-30 18:07:02 浏览: 34
Project-4-Hunter-College:一种链表实现,使用递归原理允许链表的反转和旋转
在 C++ 中,你可以通过迭代或递归的方式来反转链表。这里是一个简单的迭代方法的示例代码:
```cpp
#include <iostream>
using namespace std;
// 定义链表节点结构体
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
// 反转链表的函数
ListNode* reverseList(ListNode* h) {
ListNode* prev = nullptr; // 初始化前驱节点为NULL
ListNode* curr = h; // 当前节点指向头结点
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) {
cout << temp->val << " -> ";
temp = temp->next;
}
cout << "nullptr" << endl;
}
int main() {
ListNode* list = new ListNode(1);
list->next = new ListNode(6);
list->next->next = new ListNode(2);
list->next->next->next = new ListNode(8);
cout << "Original List: ";
printList(list);
list = reverseList(list); // 调用反转函数
cout << "Reversed List: ";
printList(list);
return 0;
}
```
运行此程序后,会将原始链表 `1->6->2->8` 反转为 `8->2->6->1`。请注意,在实际项目中,你需要处理链表为空的情况,并考虑内存管理,以免造成内存泄漏。
阅读全文