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

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
本人新手,请多指教


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

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

【热门文章】
【热门文章】