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