#include<stdio.h>
#include<algorithm>
using namespace std;
typedef struct DataNode{
int elem;
struct DataNode *next;
}DataNode;
typedef struct {
int count;
DataNode *next;
}HeadNode,*hnode;
int Init(hnode *L)
{
hnode q=(HeadNode *)malloc(sizeof(HeadNode));
DataNode *p=(DataNode *)malloc(sizeof(DataNode));
if(q==NULL || p==NULL)
q->next = p;
q->count = 0;
p->next = NULL;
(*L) = q;
return 0;
}
int Clear(hnode *L)
{
if(*L==NULL)
{
return -1;
}
DataNode *p=(*L)->next->next;
DataNode *q;
while(p!=NULL)
{
q = p;
p = p->next;
free(q);
}
(*L)->count = 0;
(*L)->next->next=NULL;
return 0;
}
int Destory(hnode *L)
{
if(*L==NULL)
{
return -1;
}
DataNode *p=(*L)->next;
free(*L);
DataNode *q;
while(p!=NULL)
{
q = p;
p = p->next;
free(q);
}
*L=NULL;
return 0;
}
int Insert(hnode *L,int pos,int elem)
{
if(*L==NULL)
{
return -1;
}
if(pos<1 || pos>(*L)->count+1)
{
return -1;
}
DataNode *p=(DataNode *)malloc(sizeof(DataNode));
DataNode *q=(*L)->next;
if(p==NULL)
{
return -1;
}
p->elem = elem;
for(int i=1;i<pos;i++)
{
q=q->next;
}
p->next = q->next;
q->next = p;
(*L)->count +=1;
return 0;
}
int Delete(hnode *L,int pos,int *elem)
{
if(*L==NULL)
{
return -1;
}
if(pos<1 || pos>(*L)->count)
{
return -1;
}
DataNode *p=(*L)->next,*q;
for(int i=1;i<pos;i++)
{
p=p->next;
}
q=p->next;
p=q->next;
*elem = q->elem;
free(q);
(*L)->count-=1;
return 0;
}
int ListEmpty(hnode L)
{
if(L==NULL)
{
return -1;
}
if(L->count == 0)
{
return 1;
}
return 0;
}
int Length(hnode L)
{
if(L->next == NULL)
{
return -1;
}
return L->count;
}
int Getelem(hnode L,int pos,int *elem)
{
if(L==NULL)
{
return -1;
}
if(L->count == 0)
{
return -1;
}
if(pos<1||pos>L->count)
{
return -1;
}
DataNode *p=L->next,*q;
for(int i=1;i<pos;i++)
{
p=p->next;
}
q=p->next;
*elem = q->elem;
return 0;
}
int Change(hnode *L,int pos,int *elem)
{
if((*L)==NULL)
{
return -1;
}
if(pos<1||pos>(*L)->count)
{
return -1;
}
DataNode *p=(*L)->next,*q;
for(int i=1;i<pos;i++)
{
p=p->next;
}
q=p->next;
q->elem = *elem;
return 0;
}