运行错误:从两链表中删除相同学号的结点,求帮助!
程序代码:/*有2个链表a和b,设结点中包括学号、姓名。从a链中删去与b链中
有相同学号的那些结点.*/
#include<stdlib.h>
#include"stdio.h"
typedef struct student
{
int num;
char name[20];
struct student *next;
}Code;
void main()
{
Code *Creat(int length);
Code *Delete(Code *ahead,Code *bhead);
void Print(Code *head);
Code *ahead,*bhead;
int a_length,b_length;
printf("input length of list_a:\n");
scanf("%d",&a_length);
ahead=Creat(a_length);
Print(ahead);
printf("input length of list_b:\n");
scanf("%d",&b_length);
bhead=Creat(b_length);
Print(bhead);
ahead=Delete(ahead,bhead);
Print(ahead);
}
//建立链表函数
Code *Creat(int length)
{
Code *p1,*p2,*head;
int i;
printf("Now,input the students' information:\n");
for(i=0;i<length;i++)
{
p1=(Code *)malloc(sizeof(Code));
if(i==0)
head=p2=p1;
else
p2->next=p1;
p2=p1;
scanf("%d %s",&p1->num,p1->name);
}
p1->next=NULL;
return head;
}
//输出链表函数
void Print(Code *head)
{
Code *p;
p=head;
if(head!=NULL)
do
{
printf("number:%d name:%s\n",p->num,p->name);
p=p->next;
}while(p!=NULL);
}
//删除相同学号函数
Code *Delete(Code *ahead,Code *bhead)
{
Code *pa1,*pa2,*pb1;
pb1=bhead;
while(pb1!=NULL) //让b表中的每个结点和a表比较
{
pa1=ahead;
while((pb1->num!=pa1->num)&&(pa1!=NULL))
{
pa2=pa1; //pa2始终指向pa1的前一个结点
pa1=pa1->next;
}
if(pb1->num==pa1->num) //两链表中学号相同
if(pa1==ahead) //a链表中当前结点为第一个结点
ahead=pa1->next; //使ahead指向a链第二个结点
else
pa2->next=pa1->next; //删除pa1所指结点
pb1=pb1->next; //pb1移向下一个结点
}
return ahead;
}
//问题出在 删除学号 这个函数,一直找不出原因。希望大家多多帮忙,找出问题。[ 本帖最后由 a4811 于 2013-1-5 21:04 编辑 ]







