qq_51730795 2021-04-13 14:59 采纳率: 0%
浏览 37

C语言的链表问题,求各位大佬帮帮忙


#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之后,并且没有跳出循环。有劳各位大佬帮忙解解疑惑,困扰我一天了,是不是我创建链表出了问题还是啥的(但是我其他子函数运行都没问题啊)

  • 写回答

4条回答 默认 最新

  • 8号店长 2021-04-13 15:10
    关注
    while(p1->num<stu.num&&p1!=NULL)

     我觉得应该是要把p1!=NULL放在前面,因为当p1为空时,就不存在p1->num这个了,所以会出错

    评论

报告相同问题?

悬赏问题

  • ¥15 问题遇到的现象和发生背景 360导航页面千次ip是20元,但是我们是刷量的 超过100ip就不算量了,假量超过100就不算了 这是什么逻辑呢 有没有人能懂的 1000元红包感谢费
  • ¥30 计算机硬件实验报告寻代
  • ¥15 51单片机写代码,要求是图片上的要求,请大家积极参与,设计一个时钟,时间从12:00开始计时,液晶屏第一行显示time,第二行显示时间
  • ¥15 用C语言判断命题逻辑关系
  • ¥15 原子操作+O3编译,程序挂住
  • ¥15 使用STM32F103C6微控制器设计两个从0到F计数的一位数计数器(数字),同时,有一个控制按钮,可以选择哪个计数器工作:需要两个七段显示器和一个按钮。
  • ¥15 在yolo1到yolo11网络模型中,具体有哪些模型可以用作图像分类?
  • ¥15 AD9910输出波形向上偏移,波谷不为0V
  • ¥15 淘宝自动下单XPath自动点击插件无法点击特定<span>元素,如何解决?
  • ¥15 曙光1620-g30服务器安装硬盘后 看不到硬盘