为什么不能删除元素?
题目:从第一个链表中删除与第二个链表相同学号的结点?#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
struct student
{
long num;
float score;
struct student *next;
};
struct student *del(struct student *head1,struct student *head2)
{
struct student *p1,*p2,*p3;
for(p2=head2;p2!=NULL;p2=p2->next)
{
for(p1=head1;p1!=NULL;p3=p1,p1=p1->next)
{
if(p1->num==p2->num)
{
if(p1==head1)
head1=p1->next;
else
p3->next=p1->next;
}
}
}
return head1;
}
struct student *del_1(struct student *head1,struct student *head2)
{
struct student *p1,*p2,*p3;
for(p2=head2;p2!=NULL;p2=p2->next)
{
for(p1=head1;p1!=NULL;p3=p1,p1=p1->next)//只能够输出第一个被删除结点的链表,第二个不能输出?
{
if(p1->num==p2->num)
{
if(p2==head2)
{
head2=p2->next;
}
else
{
p2->next=p2;
}
}
}
}
return head2;
}
int main(int argc, char* argv[])
{
struct student a,b,c,d,e,f,*head1,*head2,*p,*q,*w;
a.num=99101;a.score=89;
b.num=99102;b.score=90;
c.num=99103;c.score=91;
head1=&a;
a.next=&b;
b.next=&c;
c.next=NULL;
p=head1;
printf("第一个链表为:\n");
while(p!=NULL)
{
printf("%ld%5.1f\n",p->num,p->score);
p=p->next;
}
d.num=99103;d.score=92;
e.num=99104;e.score=93;
f.num=99105;f.score=94;
head2=&d;
d.next=&e;
e.next=&f;
f.next=NULL;
q=head2;
printf("第二个链表为:\n");
while(q!=NULL)
{
printf("%ld%5.1f\n",q->num,q->score);
q=q->next;
}
head1=del(head1,head2);
printf("删除后的第一个链表为:\n");
for(p=head1;p!=NULL;p=p->next)
{
printf("%ld%5.1f\n",p->num,p->score);
}
head2=del_1(head1,head2);
printf("删除后的第二个链表为:\n");
while(q!=NULL)
{
printf("%ld%5.1f\n",q->num,q->score);
q=q->next;
}
return 0;
}