#include using namespace std;

typedef int ElemType;

struct LNode { ElemType data; // 数据域 LNode* next; // 指针域 };

struct LinkList { LNode *head; // 头指针(带头结点) void Create(int n); // 建立含n个结点的单链表 void Traverse(); // 遍历,并输出内容 };

void reverseList(LinkList La) { LNode *p = La.head->next; La.head->next = nullptr; // 将头结点的指针域置为空 while (p != nullptr) { LNode *q = p; // q指向当前结点 p = p->next; // p指向下一个结点 q->next = La.head->next; // 将q插入到头结点后 La.head->next = q; } }

void LinkList::Create(int n) { head = new LNode; // 创建头结点 head->next = nullptr; LNode *p = head; for (int i = 0; i < n; i++) { int value; cin >> value; LNode *node = new LNode; node->data = value; node->next = nullptr; p->next = node; p = p->next; } }

void LinkList::Traverse() { LNode *p = head->next; while (p != nullptr) { cout << p->data << ' '; // 修改双引号为单引号 p = p->next; } cout << endl; }

int main() { int n; while (cin >> n) { LinkList La; La.Create(n); reverseList(La); La.Traverse(); }

return 0;

}

C++ 链表就地逆置算法实现:高效代码解析

原文地址: http://www.cveoy.top/t/topic/pbZd 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录