链表的升序合并
程序代码:
#include<stdio.h> #include<stdlib.h> #define LEN sizeof(struct student) struct student { int num; int score; struct student *next; }; struct student lista,listb; int n,sum; struct student *create(void) { struct student *p1,*p2,*head; p1=p2=(struct student *)malloc(LEN); printf("input number and scores of student\n"); printf("if number is 0,stop inputing\n"); scanf("%d%d",&p1->num,&p1->score); head=NULL; while(p1->num!=0) { n=n+1; if(n==1) { head=p1; } else { p2->next=p1; } p2=p1; p1=(struct student *)malloc(LEN); scanf("%d%d",&p1->num,&p1->score); } p2->next=NULL; return head; } struct student *insert(struct student *ah,struct student *bh) { struct student *pa1,*pa2,*pb1,*pb2; pa1=pa2=ah; pb1=pb2=bh; do { while((pb1->num>pa1->num)&&(pa1->next!=NULL)) { pa2=pa1; pa1=pa1->next; } if(pb1->num<=pa1->num) { if(ah==pa1) { ah=pb1; } else { pa2->next=pb1; /*pb1=pb1->next; pb2->next=pa1; pa2=pb2; pb2=pb1;*/ } pb1=pb1->next; pb2->next=pa1; pa2=pb2; pb2=pb1; } }while(pa1->next!=NULL||(pa1==NULL&&pb1!=NULL)); if((pb1!=NULL)&&(pb1->num>pa1->num)&&(pa1->next==NULL)) { pa1->next=pb1; } return ah; } void print(struct student *head) { struct student *p; printf("\nThere are %d records :\n",sum); p=head; if(p!=NULL) do { printf("%d,%d\n",p->num,p->score); p=p->next; }while(p!=NULL); } void main() { struct student *ahead,*bhead,*abh; printf("please input lista:\n"); ahead=create(); sum=sum+n; printf("please input listb:\n"); bhead=create(); sum=sum+n; abh=insert(ahead,bhead); print(abh); }创建函数应该没有写错,很有可能是合并函数的哪个代码出错了,我现在去吃饭了,希望高手给予指点,嘿嘿!!