#include <stdio.h>
#include <stdlib.h>
int cnt;
typedef struct stu
{
char num[10];
char name[10];
char sex[2];
int age;
struct stu *next;
}A;
A *creat()
{
A *head=NULL;
A *pnew,*tail;
int flag=1;
cnt=0;
pnew=tail=(A *)malloc(sizeof(A));
while(flag)
{
cnt++;
printf("请输入第%d个人的信息:\n",cnt);
printf("请输入学号:");
scanf("%s",pnew->num);
printf("\n请输入姓名:");
scanf("%s",pnew->name);
printf("\n请输入性别:");
scanf("%s",pnew->sex);
printf("\n请输入年龄:");
scanf("%d",&pnew->age);
if(cnt==1)
{
pnew->next=NULL;
tail=pnew;
head=pnew;
}
else
{
pnew->next=NULL;
tail->next=pnew;
tail=pnew;
}
pnew=(A *)malloc(sizeof(A));
printf("是否继续输入学生信息:(Y/1||N/0)");
scanf("%d",&flag);
printf("\n");
}
free(pnew);
return head;
}
void out(A *head)
{
A *pnew;
int i=1;
pnew=head;
printf("本名单中共有%d个人的信息:\n",cnt);
while(pnew!=NULL)
{
printf("第%d个人的信息:\n",i++);
printf("学号:%s",pnew->num);
printf("\n姓名:%s",pnew->name);
printf("\n性别:%s",pnew->sex);
printf("\n年龄:%d",pnew->age);
printf("\n");
pnew=pnew->next;
}
}
A *del(A *head,int k)
{
A *pnew,*temp,*p;
pnew=p=head;
while(pnew!=NULL)
{
if(pnew->age!=k)
pnew=pnew->next;
else
{
p=head;
if(pnew==head)
{
head=head->next;
temp=head;
}
else
{
while(p->next!=pnew)
p=p->next;
temp=p;
p->next=pnew->next;
}
free(pnew);
cnt--;
pnew=temp;
}
}
return head;
}
int main(void)
{
A *head;
int k;
head=creat();
printf("请输入要删除的年龄:");
scanf("%d",&k);
head=del(head,k);
out(head);
return 0;
}
注意:一开始的第一个 if 的是时候,后面应该加 else,还有 把p=head应该写在循环的里面,因为底下会改变 p的位置,要删除第一个的时候,应该注意temp=head;