开发者社区> 问答> 正文

C语言 如何在链表表尾添加节点?

void insert(struct student *head,struct student *p)     //插入数据
{

  struct student *p1,*p2;
  p1=head;
  p2=p1->next;
  while(((p2->num)<(p->num))&&(p2!=NULL))
  {
   p1=p2;
   p2=p2->next;
  }
  if((p2->num)==(p->num))
  {
    printf("输入错误!(学号不能重复!)");
    printf("请重新操作!");
  }
  else if(p2!=NULL)
  {
      p1->next=p;
          p->next=p2;
      printf("添加完毕!");
  }
  else if(p2==NULL)
  {
      p1->next=p;
      p->next=NULL;
      printf("添加完毕!");
  }

}

p是已经定义好的结构体,但每次添加到表尾都终止运行。
完整链表代码

展开
收起
a123456678 2016-06-07 18:32:34 2397 0
1 条回答
写回答
取消 提交回答
  • 问题出在 while(((p2->num)<(p->num))&&(p2!=NULL))。
    这里会先判断 (p2->num)<(p->num),然后才判断 (p2!=NULL),所以当 p2 为 NULL 的时候获取 p2->num 就访问了空地址,导致程序终止。

    可以改成 while ((p2!=NULL) && ((p2->num)<(p->num)))。

    2019-07-17 19:30:42
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载