已有a,b两个链表,每个链表中的结点包括学号、成绩。要求把两个链表合并,按
学号升序排列。
#include<stdio.h> #include<malloc.h> #define LEN sizeof(struct student) struct student {long num; int score; struct student *next; }; struct student lista,listb; int n,sum=0; int main() {struct student *creat(void); struct student *insert(struct student *,struct student*); void print(struct studet*); struct student *ahead,*bhead,*abh; printf("input list a:\n"); ahead=creat(); sum=sum+n; printf("input list b:\n"); bhead=creat(); sum=sum+n; abh=insert(ahead,bhead); print(abh); return 0; } struct student *creat(void) //建立链表函数 {struct student *p1,*p2,*head; n=0; p1=p2=(struct student *)malloc(LEN); printf("input number & scores of student\n"); printf("if number is 0,stop inputing.\n'); scanf("%1d,%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("%1d,%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; pa2=pa1=ah; pb2=pb1=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; } }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("There are %drecords: \n",sum); p=head if(p!=NULL) do {printf("%1d %d\n",p->num,p->score); p=p->next; }while(p!=NULL); }
#include<stdio.h>
#include<malloc.h>
#define LEN sizeof(struct student)
struct student
{long num;
int score;
struct student *next;
};
struct student lista,listb;
int n,sum=0;
int main()
{struct student *creat(void);
struct student *insert(struct student *,struct student*);
void print(struct studet*);
struct student *ahead,*bhead,*abh;
printf("input list a:\n");
ahead=creat();
sum=sum+n;
printf("input list b:\n");
bhead=creat();
abh=insert(ahead,bhead);
print(abh);
return 0;
}
struct student *creat(void) //建立链表函数
{struct student *p1,*p2,*head;
n=0;
p1=p2=(struct student *)malloc(LEN);
printf("input number & scores of student\n");
printf("if number is 0,stop inputing.\n');
scanf("%1d,%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);
p2->next=NULL;
return(head);
struct student *insert(struct student *ah, struct student *bh) //插入函数
{struct student *pa1,*pa2,*pb1,*pb2;
pa2=pa1=ah;
pb2=pb1=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;
pa2->next=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("There are %drecords: \n",sum);
p=head
if(p!=NULL)
{printf("%1d %d\n",p->num,p->score);
p=p->next;
}while(p!=NULL);
这道题你会答吗?花几分钟告诉大家答案吧!
扫描二维码,关注牛客网
下载牛客APP,随时随地刷题