要在C++中实现单链表逆置,且只利用原链表的存储空间,可以通过指针操作来改变链表的节点指向。以下是一个简单的实现:
#include <iostream>
struct Node {
int data;
Node* next;
Node(int val) : data(val), next(nullptr) {}
};
class LinkedList {
public:
Node* head;
LinkedList() : head(nullptr) {}
void append(int val) {
if (!head) {
head = new Node(val);
} else {
Node* temp = head;
while (temp->next) {
temp = temp->next;
}
temp->next = new Node(val);
}
}
void reverse() {
Node* prev = nullptr;
Node* current = head;
Node* next = nullptr;
while (current) {
next = current->next; // Save next
current->next = prev; // Reverse current node's pointer
prev = current; // Move pointers one position forward
current = next;
}
head = prev;
}
void print() const {
Node* temp = head;
while (temp) {
std::cout << temp->data;
if (temp->next) {
std::cout << " ";
}
temp = temp->next;
}
std::cout << "\n";
}
};
int main() {
int n;
std::cin >> n;
LinkedList list;
for (int i = 0; i < n; ++i) {
int val;
std::cin >> val;
list.append(val);
}
list.reverse();
list.print();
return 0;
}
### 代码说明:
- **Node 结构体**:用于表示链表节点,包含数据和指针用于指向下一个节点。
- **LinkedList 类**:用于管理链表,包括添加新节点 (`append` 方法)、反转链表 (`reverse` 方法) 和打印链表 (`print` 方法) 的功能。
- **reverse 方法**:通过改变节点的指向来逆置链表,不需要额外的存储空间。
- **main 函数**:负责输入并调用上述功能进行链表处理。
通过这个程序,你可以输入链表长度和元素,然后得到逆置后的结果。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |