#include<iostream>
using namespace std;
typedef struct node
{
int data;
node*pr;
node*next;
}linknode;
typedef linknode* linklist;
int InitList(linklist&l)
{
l=new linknode;
l->pr=l;
l->next=l;
return 1;
}
int ListLength(linklist &l)
{
linklist p=l->next;
int i=0;
while(p!=l)
{
i++;
p=p->next;
}
return i;
}
int GetElemP(linklist &l,int i)
{
int j=0;linklist p=l;
while(j<=i)
{
p=p->next;
j++;
}
return p->data;
}
void ListInsert(linklist &l,int i,int e)
{
linklist p=l;linklist qp;int j=0;
while(j<i)
{
p=p->next;
j++;
}
qp=new linknode;
qp->data=e;
qp->next =p->next;
qp->pr=p;
p->next=qp;
qp->next->pr =qp;
}
void ListTraverse(linklist l)
{
linklist p=l->next;
while(p!=l)
{
cout<<p->data<<endl;
p=p->next;
}
}
void ListTraverse_(linklist l)
{
linklist p=l->pr;
while(p!=l)
{
cout<<p->data<<endl;
p=p->pr;
}
}
int ListDelete(linklist &l,int&e)
{
linklist qp=l->next ;linklist p; int j=0;
while(qp->data!=e)
{
qp=qp->next; j++;
} p=qp->pr;
p->next=qp->next;
qp->next->pr=qp->pr->next;
delete(qp);
return j;
}
int main()
{
linklist l;int i; int e=3;
InitList(l);
for(i=0;i<6;i++)
{
ListInsert(l,i,i);
}
ListInsert(l,5,9);
ListTraverse(l);
ListTraverse_(l);
ListLength(l);
cout<<"============="<<endl;
cout<<GetElemP(l,6)<<endl;
cout<<GetElemP(l,3)<<endl;
cout<<ListDelete(l,e)<<endl;
ListTraverse(l);
return 0;
}