原题链接:[编程入门]链表合并
解题思路:
注意事项:
参考代码:
#include <stdio.h> #include <malloc.h> typedef struct student { int id; int score; struct student* next; }Stu, * stu; stu creat(int n) { stu head = (stu)malloc(sizeof(Stu)); if (head==NULL) { return NULL; } stu r = head; stu s; //尾插法 for (int i = 0; i < n; i++) { s = (stu)malloc(sizeof(Stu)); if (s==NULL) { return NULL; } scanf("%d%d", &s->id, &s->score); r->next = s; r = s; s->next = NULL; } return head; } void output(stu head) { head = head->next; stu p; while (head!= NULL) { printf("%d %d\n", head->id, head->score); p = head; head = head->next; free(p); } } stu connect(stu head1, stu head2) { stu p = head1;//指向头结点 while (p->next)//指向尾结点 { p = p->next; } p->next = head2->next;//链表1连接链表2 return head1; } void sort(stu head) { stu rear = head;//创建一个指向头结点的指针 //选择排序法 while (rear->next) { //查找最小值 stu q = rear->next; stu per = rear;//指向q的前驱结点 stu min = rear->next; stu permin = rear;//指向最小值的前驱结点 while (q) { if (q->id < min->id) { min = q; permin = per; } per = q; q = q->next; } //将最小值插入合适的位置 permin->next = min->next; min->next = rear->next; rear->next = min; // rear = rear->next; } } int main() { int n = 0, m = 0; scanf("%d%d", &n, &m); stu head1 = NULL; stu head2 = NULL; stu head3 = NULL; head1=creat(n); head2=creat(m); head3 = connect(head1, head2); sort(head3); output(head3); return 0; }
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复