C语言链表问题 我想随便插入到任何节点有后面 我下面的程序错在哪呢? 求高手指导

2024-12-26 19:33:18
推荐回答(1个)
回答1:

更新后如下,有问题的地方都帮你注释了,不懂再问

#include
#include
typedef struct student
{
char name[20];
struct student *next;
}qq;

qq *creatlist(int n)
{
qq *p,*q,*head;
int i;
head=p=(qq *)malloc(sizeof(qq));
for(i=0;i {
q=(qq *)malloc((sizeof(qq)));
printf("第%d个同学名字:",i+1);
gets(q->name);
p->next=q;
p=q;
}
p->next=NULL;
return head;
}

void input(qq *head)
{
qq *p;
p=head->next;
if(p==NULL)
printf("\nend");
else
{
printf("\nhead");
do
{
printf("->%s",p->name);
p=p->next;
}while(p!=NULL);
printf("\tend\n");
}
}

qq *add(qq* head,qq *p,int a)
{
qq *s,*t;
int i;
s=head;
for(i=0;i {
s=s->next;
}
p->next=s->next; //插入写错了!
s->next=p;
return head; //这里忘了返回
}

void main()
{
qq *head,*p;
p = (qq*)malloc(sizeof(qq)); //这里你并未对p开辟内存空间
int n,a;
printf("输入链表有多少成员:"); // 导致
scanf("%d%*c",&n);
head=creatlist(n); // ↓↓↓↓↓↓↓↓
input(head);
printf("添加一个名字:"); //这里你调用p->name时,是没有内存供你存储的!
scanf("%s",p->name);
printf("\n添加在第几项:");
scanf("%d",&a);
head=add(head,p,a);
input(head);
}