链表问题。删除第一个链表变成了第一个链表中的成员被删除了。但要删除的在第二个节点能正常删除
链表问题。删除第一个链表变成了第一个链表中的成员被删除了。但要删除的在第二个节点能正常删除链表问题。删除第一个链表变成了第一个链表中的成员被删除了。但要删除的在第二个节点能正常删除
我现在要删除成员名为QQ的链表。。如果我一开始就先输入QQ成员名的信息。。就只删除age的信息。。并不把第一个链表删除了。。但是如果我第二个开始输入QQ。他就能删除正常。。
望高手帮忙看一下。。但告诉我问题出在那里。在线等。我已经标出红字部分
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
struct PERSON
{
int age;
float weight;
char name[25];
};
typedef struct node
{
struct PERSON data;
struct node *next;
}NODE;
NODE *create(int n)
{
NODE *pnew,*pcur;
NODE *head=NULL;
int num=0;
if(n<1)return head;
while(num<n)
{
struct PERSON one;
printf("NO: %d/%d\n",num+1,n);
printf("Input Name ,age and weight:");
scanf("%s%d%f",one.name,&(one.age),&(one.weight));
pnew=(NODE *)malloc(sizeof(NODE));
pnew->data=one;
if(head==NULL)
head=pnew;
else
pcur->next=pnew;
pcur=pnew;
num++;
}
pcur->next=NULL;
return head;
}
void outlist(NODE *head)
{
NODE *pcur=head;
while(pcur!=NULL)
{
printf("\n%5s%5d%10.2f\n",(pcur->data).name,(pcur->data).age,(pcur->data).weight);
pcur=pcur->next;
}
printf("\n");
}
void del(NODE **head,char *name)
{
NODE *p,*a;
a=p=head;
if(p==NULL)return;
if(strcmp((p->data).name,name)==0)
{
*head=p->next;
free(p);
}
else
{
while((p->next)!=NULL&&(strcmp((p->data).name,name)))
{
a=p;
p=p->next;
}
if(strcmp((p->data).name,name)==0)
{
a->next=p->next;
free(p);
}
}
}