运行错误:从两链表中删除相同学号的结点,求帮助!
程序代码:
/*有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 编辑 ]