栈的要求是后进先出,所以我们就可以利用栈的这个性质来实现链表逆置
具体代码如下:
#include <iostream>
using namespace std;
#define OK 1
#define MAX 100
typedef int Elemtype;
typedef int status;
typedef struct{//顺序栈结构体
Elemtype *top;
Elemtype *base;
int length;
}Sqstack;
typedef struct LNode{//链表结构体
Elemtype a;
struct LNode *next;
}LNode,*LinkList;
status Initlist(LinkList &L);//初始化链表
status Pushlist(LinkList &L,int n);//为链表输入元素
status Init(Sqstack &B);//初始化顺序栈
status Pust(Sqstack &B,LinkList L);//链表的元素入栈
status Pop(Sqstack &B,LinkList &L);//出栈把元素再赋到链表中
status Traverlist(LinkList &L);//遍历输出链表中的元素
int main()
{
LinkList L;
Sqstack B;
int n;
Initlist(L);
cout<<"请输入链表中的数的个数:";
cin>>n;
cout<<"请以此输入链表中的值:";
Pushlist(L,n);
Init(B);
Pust(B,L);
Pop(B,L);
cout<<"此链表逆置为:";
Traverlist(L);
}
status Initlist(LinkList &L)
{
L=new LNode;
L->next=NULL;
return OK;
}
status Pushlist(LinkList &L,int n)
{
LinkList p,r;
int i;
r=L;
for(i=0;i<n;i++)
{
p=new LNode;
cin>>p->a;
p->next=NULL;
r->next=p;
r=p;
}
return OK;
}
status Init(Sqstack &B)
{
B.top=new Elemtype[MAX];
B.base=B.top;
B.length=MAX;
return OK;
}
status Pust(Sqstack &B,LinkList L)
{
LinkList p;
p=L->next;
while(p)
{
*B.top++=p->a;
p=p->next;
}
return OK;
}
status Pop(Sqstack &B,LinkList &L)
{
LinkList p;
p=L->next;
while(B.top!=B.base)
{
p->a=*--B.top;
p=p->next;
}
return OK;
}
status Traverlist(LinkList &L)
{
LinkList p;
p=L->next;
while(p)
{
cout<<p->a<<" ";
p=p->next;
}
}