数据结构单链表,删除后再显示出现问题,求大神解答
#include<stdio.h>#include<stdlib.h>
#include <malloc.h>
typedef int datatype;
typedef struct node{
datatype data;
struct node *next;
}Lnode;
Lnode *initialize();
int creatlist(Lnode *L);
int insert(Lnode *L);
int deletel(Lnode *L);
int show(Lnode *L);
int find(Lnode *L);
int main()
{
Lnode *L;
int s;
printf("请选择你的操作:\n");
printf("1.初始化\t");
printf("2.创建\t");
printf("3.插入\t");
printf("4.删除\t");
printf("5.查找\t");
printf("6.显示\t");
printf("0.退出\t");
scanf("%d",&s);
while(s!=0)
{
if(s==1)
{
L=initialize();
}
else if(s==2)
{
creatlist(L);
}
else if(s==3)
{
insert(L);
}
else if(s==4)
{
deletel(L);
}
else if(s==5)
{
find(L);
}
else if(s==6)
{
show(L);
}
else
printf("输入有误!");
printf("请选择你的操作:\n");
printf("1.初始化\t");
printf("2.创建\t");
printf("3.插入\t");
printf("4.删除\t");
printf("5.查找\t");
printf("6.显示\t");
printf("0.退出\t");
scanf("%d",&s);
}
}
Lnode *initialize()
{
Lnode *head,*p,*q;
head=(struct node *)malloc(sizeof(struct node *));
head->next=NULL;
q=head;
printf("头结点建立成功!\n");
return (head);
}
int creatlist(Lnode *head)
{
int m;
Lnode *p,*q;
printf("请输入建立链表的长度:\n");
scanf("%d",&m);
printf("请依次输入表中的值:");
for(int i=1;i<=m;i++)
{
p=(Lnode *)malloc(sizeof(Lnode *));
scanf("%d",&p->data);
p->next =head->next;
head->next=p;
}
}
int insert(Lnode *head)
{
Lnode *p;
p=(Lnode* )malloc(sizeof(Lnode *));
printf("请输入要插入的数据:\n");
scanf("%d",&p->data);
p->next=head->next;
head->next=p;
printf("插入成功!\n");
}
int find(Lnode *head)
{
Lnode *p=head->next;
int figure;
printf("请输入要查找的数值:\n");
scanf("%d",&figure);
while(p!=NULL&&figure!=p->data)
{
p=p->next;
}
if(p==NULL)
{
printf("你要查找的数据不存在!\n");
}
else
printf("你要查找的数据存在,它是%d\n",figure);
}
int deletel(Lnode *head)
{
Lnode *m;
Lnode *p=head->next;
int figure;
printf("请输入要删除的数据:\n");
scanf("%d",&figure);
while(p->next !=NULL&&p->next->data!=figure)
{
p=p->next;
}
if(p==NULL)
{
printf("你要删除的数据不存在!\n");
}
else
{
m=p;
m->next=p->next->next ;
printf("删除成功!\n");
free(p);
}
return 1;
}
int show(Lnode *head)
{
Lnode *p=head->next;
while(p->next!=NULL)
{
printf("%d\n",p->data);
p =p->next ;
}
printf("%d\n",p->data);
}