要在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 小助理,如未能正确解答您的问题,请继续追问。