#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct STU
{
int num;
struct STU *next;
};
struct STU *creat();
void printf1(struct STU *head);
void add(struct STU **head,struct STU stu);
void del(struct STU **head,int num);
void des(struct STU **head);
int main()
{
struct STU *head1,stu;
int num;
head1=creat();
printf1(head1);
printf("\n请输入要添加的学生信息\n");
scanf("%d",&stu.num);
add(&head1,stu);
printf1(head1);
printf("\n请输入要删除的学生学号\n");
scanf("%d",&num);
del(&head1,num);
printf1(head1);
des(&head1);
}
struct STU *creat()
{
struct STU *head=NULL,*p1,*p2;
p1=(struct STU *)malloc(sizeof(struct STU));
p1->next=NULL;
scanf("%d",&p1->num);
while(p1->num!=0)
{
if(head==NULL)
{
head=p1;
p2=p1;
}
else
{
p2->next=p1;
p2=p1;
}
p1=(struct STU *)malloc(sizeof(struct STU));
p1->next=NULL;
scanf("%d",&p1->num);
}
return head;
}
void printf1(struct STU *head)
{
while(head!=NULL)
{
printf("%4d",head->num);
head=head->next;
}
}
void add(struct STU **head,struct STU stu)
{
struct STU *p1,*p2,*p;
p=(struct STU *)malloc(sizeof(struct STU));
p->num =stu.num;
p->next=NULL;
p1=*head;
while(p1->num<stu.num&&p1!=NULL)
{
p2=p1;
p1=p1->next;
}
//printf("3");
if(p1==*head)
{
*head=p;
p->next=p1;
}
else if(p1!=NULL)
{
p2->next=p;
p->next=p1;
}
if(p1==NULL)
{
// printf("1");
p2->next=p;
p->next=NULL;
}
}
void del(struct STU **head, int num )
{
struct STU *p1,*p2;
p1=*head;
while(p1!=NULL&&p1->num!=num)
{
p2=p1;
p1=p1->next;
}
if(p1==*head)
{
*head=(*head)->next;
}
else if(p1!=NULL&&p1->num==num)
{
p2->next=p1->next;
}
else
printf("查无此人");
}
void des(struct STU **head)
{
struct STU *p;
while(*head)
{
p=*head;
*head=(*head)->next;
free(p);
}
}
求助!!为什么这个链表的插入子函数(void add)在插入的是末尾值的时候会死在while循环里面啊,按照理论来说它读到P1=NULL就会退出来啊,可是它还是死在了读取NULL之后,并且没有跳出循环。有劳各位大佬帮忙解解疑惑,困扰我一天了,是不是我创建链表出了问题还是啥的(但是我其他子函数运行都没问题啊)