#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data;
struct node *next;
}*PNODE,NODE;
void insert(PNODE head, int n);
PNODE init();
void del(PNODE head,int n);
void ins(PNODE head,int n);
void delet(PNODE head,int n);
void print(PNODE head);
//void freeAllNode(PNODE head);
//主函数
int main()
{
int i,t,m,x;
PNODE head = init(); //接受init()的返回值, 即指向了temp
for (i = 0; i < 10;i++) //创建了十个结点
insert(head,i);
//freeAllNode(head);
printf("请输入你要删除的是第几个结点:\n");
scanf("%d",&t);
del(head,t);
print(head);
printf("请输入一个你要插入的结点的位置:\n");
scanf("%d",&m);
ins(head,m);
print(head);
printf("请输入你要删除的一个数据:\n");
scanf("%d",&x);
delet(head,x);
print(head);
return 0;
}
//链表的初始化
PNODE init()
{
PNODE temp = (PNODE)malloc(sizeof(NODE));
temp->next = NULL; //创建了一个头结点
return temp;
}
//可以说是插入函数也可以说是创建函数
void insert(PNODE head,int n)
{
PNODE temp=(PNODE)malloc(sizeof(struct node));
temp->data = n;
//头插
temp->next = head->next;
head ->next= temp;
}
//删除一个指定的结点
void del(PNODE head,int n)
{
PNODE p,q,p1;
int i=0;
p=head;
while(p->next!=NULL)
{
i++;
p=p->next;
if(i<n)
{
q=p;
}
}
p1=q->next;
q->next=p1->next;
free(p1);
}
//向链表中再插入一个结点
void ins(PNODE head,int n)
{
PNODE p=head,q;
//在链表的第n个位置上再插入一个结点
int i=0;
PNODE p1=(PNODE)malloc(sizeof(NODE));
p1->data=10;
while(p->next!=NULL)
{
i++;
if(i<n+1)
{
q=p;//q是要插入结点的前一个结点。
}
p=p->next;
}
p1->next=q->next;
q->next=p1;
}
//删除数据域是n的结点
void delet(PNODE head,int n)
{
PNODE p=head->next,q1;
while(p!=NULL)
{ int i=0;
if(p->data!=n)
{
i++;
q1=p;
}
if(p->data==n)
{
q1->next=p->next;
free(p);
break;
}
p=p->next;
}
}
//输出函数
void print(PNODE head)
{
PNODE p=head->next;
while (p!=NULL)
{
printf("%d->", p->data);
p = p->next;
}
printf("NULL\n");
}
//释放掉所有的空间
/*void freeAllNode(PNODE head)
{
PNODE p = head,temp;
while (p != NULL)
{
temp = p->next;
free(p);
p = temp;
}
}*/