c语言链表常见问题,c语言链表问题

#include

#define NUll 0

#include

struct stu

{

char name[6];

int xuehao;

int grade;

struct stu *next;

};

typedef struct stu STU;

main()

{

STU *p,*p_start,*p2,*p_print,*p_charu,*p_charu2;

int i,xuehao;

//输入

for (i=0;i<3;i++)

{

p=(STU *)malloc(sizeof(STU));

printf("请输入学生姓名:\n");

scanf("%s",&p->name);

printf("请输入学生的学号:\n");

scanf("%d",&p->xuehao);

printf("请输入学生的成绩:\n");

scanf("%d",&p->grade);

if (i==0)

p2=p_start=p;

else

{

p2->next=p;

p2=p;

if (i==2)

p->next=NULL;

}

}

// printf("%d",p_start->next->next->next);

// printf("%d",p_start->next->next->xuehao);

//链表的插入

p_charu=p_start;

printf("请输入要删除的学号\n");

scanf("%d",&xuehao);

while (1)

{

p_charu2=p_charu->next;

if (p_charu->next->xuehao==xuehao)

{

// if (p_charu->next->next==NULL)

// p_charu->next=NULL;

else

p_charu->next=p_charu->next->next;

free(p_charu2);

break;

}

if (p_charu->xuehao==xuehao)

{

p_start=p_charu->next;

free(p_charu);

break;

}

p_charu=p->next;

}

//输出

p_print=p_start;

/*

for (i=0;i<2;i++)

{

printf("学生姓名为:%s\n",p_print->name);

printf("学生的学号为:%d\n",p_print->xuehao);

printf("学生的分数为:%d\n",p_print->grade);

if (p_print->next!=NULL)

p_print=p_print->next;

}

*/

}

这是一个删除结点并输出的程序,

加注释的输出部分没有问题,关键应该在删除结点的循环那里,但是找不见错误啊,

错误为:当删除最后一个链表也就是3时程序发生错误,停止运行。

求解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值