C语言链表问题 我想插入一个数到链表的最后 为什么这个程序出错了 ???

#include<stdio.h>#include<stdlib.h>typedefstructstudent{chara[20];structstudent*next;... #include<stdio.h>
#include<stdlib.h>
typedef struct student
{
char a[20];
struct student *next;
}qq;
qq *creatlist(int n)
{
qq *head,*p,*q;
int i;
head=p=(qq *)malloc(sizeof(qq));
for(i=1;i<=n;i++)
{
q=(qq *)malloc(sizeof(qq));
printf("第%d个同学的名字:",i);
gets(q->a);
p->next=q;
p=q;
}
p->next=NULL;
return head;
}
void output(qq *head)
{
qq *p;
p=head->next;
if(p==NULL)
printf("\nend");
else
{
printf("\nhead");
do
{
printf("->%s",p->a);
p=p->next;
}
while(p!=NULL);
printf("->end\n");
}
}
qq *jiaru(qq *head,qq *p)
{
qq *q;
q=head->next;
while(q!=NULL)
{
q=q->next;
}
q->next=p;
p->next=NULL;
return head;
}
main()
{
qq *head,*p;
int n;
printf("你要输入多少数据:");
scanf("%d%*c",&n);
head=creatlist(n);
output(head);
printf("输入你想加入链表的数据");
p=(qq *)malloc(sizeof(qq));
gets(p->a);
head=jiaru(head,p);
output(head);
}
展开
 我来答
chenbobio
2011-07-31 · TA获得超过429个赞
知道小有建树答主
回答量:85
采纳率:0%
帮助的人:112万
展开全部
这里出错了,你仔细看看这句:
while(q!=NULL)
{
q=q->next;
}
q->next=p;
分析这几句while语句结束了q已经为NULL了,所以你在来在NULL后面插入p,就不对了,要崩溃的!所以把那个while语句的q!=NULL换为q->next!=NULL,这样循环结束q就为最后一个节点,
插入操作就不会出现问题了.
while(q->next!=NULL)
{
q=q->next;
}
q->next=p;
追问
谢谢
追答
不用谢!
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式