#include<iostream.h>
const int Endmark=0;
typedef int Elemtype;
struct Linklist
{
public:
Elemtype data;
Linklist *next;
};
//尾插法建立带表头结点的单链表
Linklist *CreateLinklist()
{
Elemtype value;
Linklist *head,*rear;
rear=head=new Linklist;
cout<<"请输入链表,以0为结尾: "<<endl;
cin>>value;
while(value!=Endmark)
{
rear->next=new Linklist;
rear=rear->next;
rear->data=value;
cin>>value;
}
rear->next=NULL;
return head;
}
//输出链表
void DisplayLinklist(Linklist *head)
{
Linklist *p=head->next;
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
//逆置链表
Linklist *ContraryLinklist(Linklist *head)
{
Linklist *p,*q,*temp;
p=q=new Linklist;
p=head->next;
q=p->next;
while(q!=NULL)
{
temp=head->next;
head->next=q;
p->next=q->next;
q->next=temp;
q=p->next; //p->next 永远都指向了需要删除的节点。
}
return head;
}
void main()
{
Linklist *t1,*t2;
t1=CreateLinklist();
cout<<"原链表为: "<<endl;
DisplayLinklist(t1);
t2=ContraryLinklist(t1);
cout<<"逆置后的链表为: "<<endl;
DisplayLinklist(t2);
}