这是一个删除结点并输出的程序,总共有三个链表
错误为:当删除最后一个链表也就是3时程序发生错误,停止运行。
求大家帮忙解解决!
#include <stdio.h>
#define NUll 0
#include <stdlib.h>
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;
}
}
//链表的删除
p_charu=p_start;
printf("请输入要删除的学号\n");
scanf("%d",&xuehao);
while (1)
{
p_charu2=p_charu->next;
if (p_charu->next->xuehao==xuehao)
{
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;
}
}