原题链接:[编程入门]链表合并
#include<stdio.h> #include<stdlib.h> typedef struct student{ int id; int score; struct student *next; }Stu; Stu *create_stu(int n){ Stu *head=(Stu *)malloc(sizeof(Stu)); if(head==NULL){ return NULL; } head->id=-1; head->score=-1; head->next=NULL; Stu *tmp=head; for(int i=0;i<n;i++){ Stu *newNode=(Stu* ) malloc (sizeof(Stu)); if(newNode==NULL){ return NULL; } scanf("%d %d",&newNode->id,&newNode->score); newNode->next=NULL; tmp->next=newNode; tmp=newNode; } return head; } Stu *merge_stu(Stu *s1,Stu *s2){ if(s1==NULL||s2==NULL){ return NULL; } Stu *tmp1=s1; Stu *tmp2=s2; while(tmp1->next!=NULL){ tmp1=tmp1->next; } tmp1->next=tmp2->next; free(tmp2); return s1; } void sort_Stu(Stu *students){ if(students==NULL){ return; } Stu *pre=NULL; Stu *cur=NULL; Stu tmp; for(pre=students->next;pre->next!=NULL;pre=pre->next){ for(cur=pre->next;cur!=NULL;cur=cur->next){ if(pre->id>cur->id){ tmp=*pre; *pre=*cur; *cur=tmp; tmp.next=pre->next; pre->next=cur->next; cur->next=tmp.next; } } } } void print_stu(Stu *students){ if(students==NULL){ printf("invalid list!\n"); return; } Stu *cur=students->next; while(cur!=NULL){ printf("%d %d\n",cur->id,cur->score); cur=cur->next; } } void destroy_stu(Stu *students){ if(students==NULL){ return; } Stu *s=students; Stu *tmp; while(s!=NULL){ tmp=s->next; free(s); s=tmp; } } int main() { int N,M; scanf("%d %d",&N,&M); Stu *s1=create_stu(N); Stu *s2=create_stu(M); Stu *students=merge_stu(s1,s2); sort_Stu(students); print_stu(students); destroy_stu(students); return 0; }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复