单链表头插法逆置C++完整代码
时间: 2024-10-08 21:17:51 浏览: 44
单链表头部插入逆序的操作并不常见,因为通常我们更倾向于对整个链表进行反转,而不是只通过头插法。但是如果你确实需要这样做,你可以创建一个新的链表,将原链表的所有节点逐个添加到新链表的末尾。以下是C++的一种简单实现,假设有一个名为`Node`的链表节点结构:
```cpp
#include <iostream>
// 定义链表节点结构
struct Node {
int data;
Node* next;
Node(int value) : data(value), next(nullptr) {}
};
// 反转链表函数
Node* reverseList(Node* head) {
if (head == nullptr || head->next == nullptr) { // 如果链表为空或只有一个元素,直接返回
return head;
}
// 创建新的头结点
Node* newHead = new Node(0);
Node* current = head; // 初始化当前指针
Node* prev = newHead; // 初始化前驱指针
while (current != nullptr) { // 遍历原链表
Node* temp = current->next; // 保存下一个节点
current->next = prev; // 将当前节点连接到前驱
prev = current; // 更新前驱指针
current = temp; // 移动当前指针
}
return newHead->next; // 返回新链表的头节点
}
// 测试代码
int main() {
Node* originalList = new Node(1); // 假设原始链表为:1 -> NULL
originalList->next = new Node(2);
originalList->next->next = new Node(3);
Node* reversedList = reverseList(originalList);
// 输出反转后的链表
Node* temp = reversedList;
while (temp != nullptr) {
std::cout << temp->data << " ";
temp = temp->next;
}
return 0;
}
```
阅读全文