#include<iostream>
using namespace std;
class linknode{
public:
int data;
linknode *link;
linknode(int el,linknode* ptr=NULL){
data=el;
link=ptr;
}
};
class linklist{
private:
linknode *first;
linknode *prev;
public:
linklist();
~linklist();
void inserttail(int value); //表尾插入数据
void invert(); //链表倒置
void output();
};
linklist::linklist(){
first=new linknode(-1,0);
prev=first;
}
linklist::~linklist(){
linknode *temp=first;
while(temp!=NULL){
temp=first->link;
delete first;
first=temp;;
}
}
void linklist::output(){
linknode *temp=first;
while(temp!=NULL){
cout<<temp->data<<" ";
temp=temp->link;
}
cout<<endl;
}
void linklist::inserttail(int value){
linknode *temp;
if(first->data==-1){
first->data=value;
}
else{
temp=new linknode(value,0);
prev->link=temp;
prev=temp;
}
}
void linklist::invert(){
if(first->link==NULL)
;
else if(first->link->link==NULL){
linknode* temp=first;
first=first->link;
first->link=temp;
temp->link=NULL;
}
else{
linknode *temp1=first,*temp2=first->link,*temp3=temp2->link;
while(temp3!=NULL){
temp2->link=temp1;
temp1=temp2;
temp2=temp3;
temp3=temp3->link;
}
temp2->link=temp1;
first->link=NULL;
first=temp2;
}
}
void main(){
int a;
int value;
linklist list;
cout<<"输入链表节点数据(-1 to end):"<<endl;
cin>>value;
while(value!=-1){
list.inserttail(value);
cin>>value;
}
list.invert();
list.output();
cin>>a;
}