#include
#include
typedef int Elemtype;
typedef struct Node{
Elemtype data;
struct Node *next;
}Node,*LinkList;
/* , , */
/* : malloc , 。 , , , , 。 , , , , malloc 。*/
//
void create_ListHead(LinkList *pHead) //
{
*pHead=(LinkList)malloc(sizeof(Node));
if(NULL!=pHead)
(*pHead)->next=NULL;
else
printf("
");
}
//
LinkList get_newNode(Elemtype e)
{
LinkList newNode=(LinkList)malloc(sizeof(Node));
if(NULL!=newNode)
{
newNode->data=e;
newNode->next=NULL;
return newNode;
}
else
{
printf("
");
return 0;
}
}
//
void push_Front(LinkList *L,Elemtype e)
{
LinkList p;
p=get_newNode(e);
p->next=(*L)->next;
(*L)->next=p;
}
//
void push_Back(LinkList *L,Elemtype e)
{
LinkList tail;
tail=*L;
while(NULL!=tail->next) // tail
tail=tail->next;
tail->next=get_newNode(e);
}
//
void pop_Front(LinkList *L)
{
LinkList p;
p=(*L)->next;
if(p!=NULL)
{
(*L)->next=p->next;
free(p);
p=NULL; // ,
printf("OK
");
}
}
//
void pop_Back(LinkList *L)
{
LinkList p,q;
p=*L;
while(p->next!=NULL)
{
q=p;
p=p->next;
}
free(p);
p=NULL;
q->next=NULL;
printf("OK
");
}
//
void delete_List(LinkList *L,Elemtype key)
{
LinkList p,q;
for(p=*L;NULL!=p->next;p=p->next)
{
if(p->next->data==key)
{
q=p->next; // ,
p->next=q->next;
free(q);
q=NULL;
printf("
");
return;
}
}
printf("
");
}
//
void print_List(LinkList *L)
{
LinkList p;
p=(*L)->next;
if(p==NULL)
printf("NULL
");
else
{
while(NULL!=p)
{
printf("%d ",p->data);
p=p->next;
}
printf("
");
}
}
//
int length_List(LinkList *L)
{
LinkList p=(*L)->next;
int length=0;
while(NULL!=p)
{
length++;
p=p->next;
}
return length;
}
//
int search_List(LinkList *L,Elemtype e)
{
LinkList p=(*L)->next;
int i=1;
while(NULL!=p)
{
if(p->data==e)
return i;
else
p=p->next;
i++;
}
printf("
");
return 0;
}
// ( )
void destory_List(LinkList *L)
{
LinkList p,q;
p=(*L)->next;
while(p!=NULL)
{
q=p->next;
free(p);
p=q;
}
(*L)->next=NULL;
printf("OK
");
}
//
void invert(LinkList L)
{
LinkList p,q;
p=L->next;
L->next=NULL;
while(p)
{
q=p->next;
p->next=L->next;
L->next=p;
p=q;
}
}
int main()
{
LinkList L;int e,i,temp;
while((i=getchar())!='#') // #
{
switch(i)
{
case '1':create_ListHead(&L);break;
case '2':printf("
");
scanf("%d",&e);
push_Back(&L,e);
break;
case '3':printf("
");
scanf("%d",&e);
push_Front(&L,e);
break;
case '4':pop_Front(&L);break;
case '5':pop_Back(&L);break;
case '6':print_List(&L);break;
case '7':printf("
");
scanf("%d",&e);
delete_List(&L,e);
break;
case '8':printf(" %d
",length_List(&L));break;
case '9':printf("
");
scanf("%d",&e);
temp=search_List(&L,e);
if(temp!=0)
printf("%d %d
",e,temp);
break;
case '0':destory_List(&L);break;
case 'a':invert(L);break;
}
}
destory_List(&L);
free(L);
L=NULL;
return 0;
}