#include <iostream>
using namespace std;
class LinkNodeOfInt{
public:
int data;
LinkNodeOfInt *link;
LinkNodeOfInt(const int &a,LinkNodeOfInt *ptr)
{
data=a;
link=ptr;
}
LinkNodeOfInt()
{
}
};
class ListOfint{
public:
LinkNodeOfInt *head;
LinkNodeOfInt *tail;
int size;
ListOfint()
{
head=new LinkNodeOfInt(0,NULL);
tail=head;
size=0;
}
ListOfint(const ListOfint &list)
{
head=new LinkNodeOfInt(0,NULL);
LinkNodeOfInt *cur=head->link;
LinkNodeOfInt *othercur=list.head->link;
int i=0;
size=list.size;
while(othercur!=NULL)
{
LinkNodeOfInt *s=new LinkNodeOfInt(othercur->data,NULL);
if(i==0)
{
head->link=s;
cur=head->link;
}
else
{ cur->link=s;
cur=cur->link;
i++;
}
othercur=othercur->link;
}
}
void insertTotail(int value)
{
LinkNodeOfInt *p=tail;
p->link=new LinkNodeOfInt(value,NULL);
tail=p->link;
}
void inserttoHead(int value)
{
LinkNodeOfInt *p=head->link;
LinkNodeOfInt *s=new LinkNodeOfInt(value,p);
head->link=s;
}
void prt_list()
{
LinkNodeOfInt *p=head->link;
while (p)
{
cout<<p->data<<endl;
p=p->link;
}
}
LinkNodeOfInt* setPos(int pos)
{
if(pos==-1)
{
return head;
}
int count=0;
LinkNodeOfInt *p=head->link;
while(p!=NULL&&count< pos){
p=p->link;
count++;
}
return p;
}
bool insertPos(int i,int value)
{
LinkNodeOfInt *p,*q;
if(p==setPos(i-1)==NULL)
{
cout<<"the operation is illegal";
return false;
}
q=new LinkNodeOfInt(value,p->link);
p->link=q;
if(p==tail)
{
tail=q;
}
size++;
return true;
}
bool deletePos(int i)
{
LinkNodeOfInt *p ,*q;
if(p=setPos(i-1)==tail||p==tail)
{
cout<<"the operation is illegal";
return false;
}
q=p->link;
if(q==tail)
{
tail=p;
p->link=NULL;
delete q;
}
else if(q !=NULL)
{
p->link=q->link;
delete q;
}
size--;
return true;
}
int getSize()
{
return size;
}
};