单链表的插入、删除、遍历操作

自己写的简单的单链表的创建,插入,删除,遍历操作

#include

struct list
{
int data;
struct list *next;
};
//遍历链表
void show(struct list *li)
{
while(li)
{
printf("%d ",li->data);
li=li->next;
}
printf("\n");
}
//创建链表 尾插法
struct list *creat(struct list *li, int n)
{
li=(struct list *)malloc(sizeof(struct list));
struct list *head,*p;
int i;
scanf("%d",&(li->data));
head=li;
for(i=1;i{
p=(struct list *)malloc(sizeof(struct list));
scanf("%d",&(p->data));
li->next=p;
li=p;

}
li->next=NULL;
return head;
}
//删除链表元素
struct list *delet(struct list *li, int n)
{
struct list *p,*p1;
if(n==1)
{
p=li->next;
free(li);
}
else
{
p=li;
int i;
for(i=1;i{
li=li->next;
}
p1=p->next;
p->next=p1->next;
free(p1);
}
return p;
}
//向链表插入元素
struct list *insert(struct list *li, int n)
{
struct list *p=(struct list *)malloc(sizeof(struct list));
scanf("%d",&(p->data));
struct list *p1;
if(n==1)
{

p->next=li;
p1=p;
}
else
{
p1=li;
int i;
for(i=1;i{
li=li->next;
}
p->next=li->next;
li->next=p;
}
return p1;

}
int main()
{
struct list *li;
struct list *L=creat(li,5);
show(L);
struct list *L1=delet(L,1);
show(L1);
struct list *L2=insert(L1,1);
show(L2);
return 0;
}






你可能感兴趣的:(C)