通讯录中的删除函数检错 c语言程序 急求

来源:百度知道 编辑:UC知道 时间:2024/06/19 23:50:44
lnode deletel(lnode L)
{
int n=0;
char a[20];
lnode p=L,pre=NULL;
if(p->next!=NULL)
{
printf("请选择:/n1:姓名删除\t2:按学号删除\t");
scanf("%d",&n);
switch(n)
{
case 1:
p=L->next;
printf("请输入姓名");
scanf("%s",a);
while(strcmp(p->name,a)!=0&&p->next!=NULL)
{
pre=p;
p=p->next;
}
if(strcmp(p->name,a)==0)
{
pre->next=p->next;
free(p);
printf("删除成功");
return L;
break;
}
else
printf("未找到此联系人");
return L;
break;
case 2:
printf("请输入学号");
scanf("%s",a);
p=L->next;
while(str

函数中pre->next=p->next;是否应该改为pre=p->next;
源程序没有错误,pre->next=p->next;是对的
pre->next=p->next;的含义是:
将pre的next指针指向p的next指针指向的结点(将p后面的链表挂到了pre结点的后面),这样就将p结点后面的链表挂到了pre结点的后面,
而p结点被独立出来,
然后再将独立的p结点删除,这样不影响其它的结点。

pre->next=p->next; 是对的。
pre=p->next; 没有意义。

有没有错误,要运行一下才能清楚地知道 。