//结构声明
typedef int ElemType;
typedef struct Node
{
ElemType data;
struct Node *next;
}List;
//初始化
void InitList(List **list)
{
if(list == NULL) exit(0);
*list = NULL;
}
//申请新结点
static List_ApplyNode(ElemType val,List *next)
{
List *s = (List*)malloc(sizeof(List));
if(s == NULL) return NULL;
s->data = val;
s->next = next;
return s;
}
//头插
void InsterLinkListHead(LinkList *list , int val)
{
if(list == NULL) exit(0);
List *NewNode =_ApplyNode(val ,*list);
if(NewNode == NULL) exit(0);
*list = NewNode;
}
//按位置插
void InterLinkList(LinkList **list,int val,int pos)
{
if(list == NULL) exit(0);
if(pos <0)
{
printf("Pos is error\n");
return;
}
if(pos == 0)
{
InterLinkListHead(list, val);
}
else
{
List *p =list;
while(pos && p != NULL)
{
p=p->next;
pos--;
}
if(p == NULL)
{
printf("Pos is error\n");
}
else
{
List *NewNode = _ApplyNode(val,p->next);
if(NewNode == NULL) exit(0);
p->next = NewNode;
}
}
}
//尾插
void InterLinkListTail(LinkList **list,int val)
{
if(list == NULL) exit(0);
if(*list == NULL)
{
InsterLinkListHead (list , val);
return;
}
List *p = *list;
while(p->next != NULL)
{
p=p->next;
}
p->next = _ApplyNode (val,NULL);
}
//Show
void ShowLinkList(LinkList **list,int val)
{
if(list == NULL) exit(0);
List *p=*list;
while(p->next != NULL)
{
printf("%d->NULL\n",p->data);
p=p->next;
}
}
//按位置删除
void DeleteLinkList(LinkList **list , int pos)
{
if(list == NULL) exit(0);
if(pos <0)
{
printf("Pos is error\n");
return;
}
if(pos == 0)
{
DeleteLinkList(list);
}
else
{
List *p = list;
while(pos>1 && p->next != NULL)
{
p=p->next;
pos--;
}
if(p->next = NULL)
{
printf("Pos is error\n");
}
else
{
List *q =p->next;
p->next =q->next;
free(q);
}
}
}
//头删
void DeleLinkListHead(LinkList **list)
{
if(list == NULL) exit(0);
if(*list == NULL)
{
printf("list is empty\n");
}
List *p= *list;
*list =p->next;
free(p);
}
//尾删
void DeleLinkListTail(List **list)
{
if(list == NULL) exit(0);
if(*list == NULL)
{
printf("list is empty\n");
return;
}
if((*list)->next == NULL)
{
DeleteLinkListHead(list);
return;
}
List *p= *list;
List *q=p->next;
while(q->next != NULL)
{
p=q;
q=q->next;
}
p->next =NULL;
free(q);
}
//按值删除
void DeleteLinkListval(LinkList **list ,int val)
{
if(list == NULL) exit(0);
if((*list)->data == val)
{
DeleteLinkListHead(list);
DeleteLinkListval(list,val);
}
else
{
List *p=*list;
List *q=p->next;
while(q != NULL)
{
if((*list)->data ==val)
{
p->next =q->next;
free(q);
q=p->next;
}
else
{
p=q;
q=q->next;
}
}
}
}