#include
#include
struct student
{
int num;
char name[15];
char clas[10];
char address[20];
struct student *next;
}
main()
{
struct student *head,*New,*p,*q;
int n,i,flag=1;
scanf("%d",&n);
head=New=(struct student *)malloc(sizeof(struct student));
scanf("%d %s %s %s",&New->num,New->name,New->clas,New->address);
for(i=0;i { New->next=(struct student *)malloc(sizeof(struct student));
New=New->next;
scanf("%d %s %s %s",&New->num,New->name,New->clas,New->address);
}
New=New->next=NULL;
free(New);
while(head!=NULL)
{
printf("%d %s %s %s\n",head->num,head->name,head->clas,head->address);
head=head->next;
}
q=head;
p=(struct student *)malloc(sizeof(struct student)); scanf("%d %s %s %s",&p->num,p->name,p->clas,p->address);
while(flag)
{
if(q->num==2)
{
q->next=p->next;
p->next=q;
flag=0;
}
q=q->next;
}
while(head!=NULL)
{
printf("%d %s %s %s\n",head->num,head->name,head->clas,head->address);
head=head->next;
}
}
你的输出那块错了,head=head->next; 已经把head移动了,所以head最后为NULL,已经找不到链表的头节点了