sm123m 2014-12-27 13:45 采纳率: 0%
浏览 2486

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 {
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 {
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时程序发生错误,停止运行。

求解

  • 写回答

6条回答 默认 最新

  • devmiao 2014-12-27 13:50
    关注

    不要这样贴代码,应该选择工具栏上的代码,然后再贴。
    你这样贴的代码丢了很多字符,没法直接调试。

    评论

报告相同问题?

悬赏问题

  • ¥15 本题的答案是不是有问题
  • ¥15 关于#r语言#的问题:(svydesign)为什么在一个大的数据集中抽取了一个小数据集
  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 蓝桥杯单片机第十三届第一场,整点继电器吸合,5s后断开出现了问题
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 Arcgis相交分析无法绘制一个或多个图形