伪代码实现:
struct LinkNode *pPrve = NULL;
struct LinkNode *pCurrent = pHeader->next;
struct LinkNode *pPrve = NULL;
while (pCurrent != NULL)
{
pNext = pCurrent->next;
pCurrent->next = pPrve;
pPrve = pCurrent;
pCurrent = pNext;
}
pHeader->next = pPrve;
具体代码实现:
#include<iostream>
using namespace std;
struct Node
{
int n;
Node *pNext;
};
class List
{
public:
Node* CreateList(int n);
void PrintList();
void Reverse(Node* pHead); //链表反转
private:
Node *pHead;//头指针
};
//尾插法
Node* List::CreateList(int n)
{
Node *pb, *pc;
pHead = new Node; //pHead结点为头结点
pc = pHead;
int i = 0;
while (i<n)
{
pb = new Node;
cout << "请输入第" << i + 1 << "个结点的数据";
cin >> pb->n;
pc->pNext = pb;
pc = pb;
pc->pNext = NULL;
i++;
}
return pHead;
}
void List::PrintList()
{
Node *Pa = pHead;
while (Pa->pNext != NULL)
{
cout << Pa->pNext->n << endl;
Pa = Pa->pNext;
}
}
void List::Reverse(Node* pHead)
{
Node* pCurrent = pHead->pNext;
Node* pPrve = NULL;
Node* pNnext = NULL;
while(pCurrent!=NULL)
{
pNnext = pCurrent->pNext;
pCurrent->pNext = pPrve;
pPrve = pCurrent;
pCurrent = pNnext;
}
pHead->pNext = pPrve;
}
int main()
{
List m;
int n;
cout << "请输入创建结点的个数";
cin >> n;
Node* pHead = m.CreateList(n);
m.PrintList();
cout<<"反转后的链表为"<<endl;
m.Reverse(pHead);
m.PrintList();
return 0;
}