假设
struct LINK {
int value;
struct LINK * next;
};
struct LINK a, b, c, d;
a->next = &b;
b->next = &c;
c->next = &d;
d->next = 0;
逆置后:
b->next = &a;
c->next = &b;
d->next = &c;
a->next = 0;
</pre><pre name="code" class="cpp">
#include <iostream>
using namespace std;
typedef int elemtype;
typedef struct LNode
{
elemtype data;
struct LNode *next;
}LNode,*LinkList;
void InitList_L(LinkList &L)//构造一个空的单链表,即初始化单链表
{
L=new LNode;
L->next=NULL;
}
void CreateList_L(LinkList &L,int n)//建立链表
{ LNode *r,*p;
int i;
r=L;
for(i=0;i<n;i++)
{
p=new LNode;
cin>>p->data;
p->next=NULL;
r->next=p;
r=p;
}
}
void ReverseList_L(LinkList &L)//链表就地倒置
{
LNode *p,*q; //就地逆置,就是在操作中,遇到a->next = &b;
//的情况,那么改写为b->next = &a;
p=L->next;
L->next=NULL;
while(p!=NULL)
{
q=p->next;
p->next=L->next;
L->next=p;
p=q;
}
}
void PrintList_L(LinkList L)//显示链表
{
LNode *p;
p=L->next;
cout<<"倒置后的单链表为:\n";
while(p)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
int main()
{
LinkList la;//LNode *la;
InitList_L(la);
cout<<"请输入链表的元素个数:";
int n;
cin>>n;
CreateList_L(la,n);
ReverseList_L(la);
PrintList_L(la);
return 0;
}