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

阅读 7.4k
1 个回答

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题