原题链接:[编程入门]链表合并
#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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复