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

发布于 2022-08-30 00:41:15 字数 678 浏览 16 评论 0

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是已经定义好的结构体,但每次添加到表尾都终止运行。
完整链表代码
http://codepad.org/gJtJAfRo
本人新手,请多指教

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

第七度阳光i 2022-09-06 00:41:15

问题出在 while(((p2->num)<(p->num))&&(p2!=NULL))
这里会先判断 (p2->num)<(p->num),然后才判断 (p2!=NULL),所以当 p2NULL 的时候获取 p2->num 就访问了空地址,导致程序终止。

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文