1-6 编写程序实现单向链表的逆转。node *reverse(node *head)
时间: 2024-10-08 07:04:24 浏览: 33
为了实现单向链表的逆转,你可以使用迭代或递归的方法。这里我提供一个使用迭代的C++代码示例:
```cpp
#include <iostream>
// 定义链表节点结构体
struct Node {
int data;
Node* next;
};
// 反转链表函数
Node* reverse(Node* head) {
// 初始化两个指针,prev为当前节点,current为下一个节点,初始时都指向头节点
Node* prev = nullptr, *current = head;
// 当链表不为空时,进行循环
while (current != nullptr) {
// 将当前节点的next指向prev
Node* temp = current->next;
current->next = prev; // 更新当前节点的next
// 移动prev和current
prev = current;
current = temp;
}
// 返回反转后的头节点
return prev;
}
// 测试用例
int main() {
// 创建一个简单的链表
Node* head = new Node{1};
head->next = new Node{2};
head->next->next = new Node{3};
head->next->next->next = new Node{4};
head->next->next->next->next = new Node{5};
std::cout << "Original List: ";
printList(head); // 自定义打印链表函数
Node* reversedHead = reverse(head);
std::cout << "\nReversed List: ";
printList(reversedHead); // 自定义打印链表函数
// 清理内存
delete reversedHead;
while (head != nullptr) {
Node* temp = head;
head = head->next;
delete temp;
}
return 0;
}
// 打印链表函数
void printList(Node* node) {
while (node != nullptr) {
std::cout << node->data << " -> ";
node = node->next;
}
std::cout << "nullptr\n";
}
```
这段代码首先创建了一个单向链表,然后调用`reverse`函数将其逆转,最后打印出原链表和逆转后的链表。
阅读全文