指向结构体的指针遇到的问题
程序代码:#include<stdio.h>
#include<string.h>
#define LA 4
#define LB 5
struct student
{
int num;
char name[8];
struct student *next;
}a[LA],b[LB];
void main()
{
struct student a[LA]={{101,"Wang"},{102,"Li"},{105,"Zhang"},{106,"Wei"}};
struct student b[LB]={{103,"Zhang"},{104,"Ma"},{105,"Chen"},{107,"Guo"},{108,"Lui"}};
int i;
struct student *p,*p1,*p2,*head1,*head2;
head1=a;
head2=b;
printf("list A:\n");
p1=head1;
for(p1=head1,i=1;i<=LA;i++)
{
if(i<LA)
p1->next=a+i;
else
p1->next=NULL;
printf("%4d%8s\n",p1->num,p1->name);
if(i<LA)
p1=p1->next;
}
printf("\n list B:\n");
for(p2=head2,i=1;i<=LB;i++)
{
if(i<LB)
p2->next=b+i;
else
p2->next=NULL;
printf("%4d%8s\n",p2->num,p2->name);
if(i<LB)
p2=p2->next;
}
p1=head1;
while(p1!=NULL)
{
p2=head2;
while((p1->num!=p2->num)&&(p2->next!=NULL))
{
p2=p2->next;
}
if(p1->num==p2->num)
{
if(p1=head1)
head1=p1->next;
else
{
p->next=p1->next;//这句代码和下面的不要感觉也行,不知道对不对
p1=p1->next;
}
}
else
{
p=p1;
p1=p1->next;
}
}
printf("\nresult:\n");
p1=head1;
while(p1!=NULL)//
{
printf("%4d%8s\n",p1->num,p1->name);
p1=p1->next;
}
//这样能输出感觉不行,不知道p1->next指向谁,如果这样可以的话那上面的输出为何搞得那么复杂,我试过了上面的输出如果用这个的话是不行的话,那为什么这里还要用这 代码,不是自相矛盾吗?
}
运行不出来,输出没有错误,就是删除相同的学号的信息后LA的其他信息显示不出来,希望高手给以指点。




