解题思路:
注意事项:
参考代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct student
{
int id;
int score;
struct student *next;
}link,*LinkNode;
void init(LinkNode *L); //初始化列表
void create(LinkNode *L,int n); //根据输入的个数创建列表
void concat(LinkNode *L1,LinkNode *L2);//将俩列表连接
void sort(LinkNode *L1);//排序
void print(LinkNode L);//打印输出
/*
下面这一段本来是想将每个列表中的值一次比较
将最小的连接在第三个链表后,后来发现,每个链表不是顺序排序的
后来想写个排序函数,将两个链表排完序在来做排序,发现太多余了
陷入了僵局,看到大佬写的,直接将链表合并后,比较,然后交换其值
嗯。。。。。
*/
// LinkNode sort(LinkNode *L1,LinkNode *L2)
// {
// LinkNode L3;
// init(&L3);
// link *p,*q;
// p = (*L1)->next;
// q = (*L2)->next;
// while(p && q)
// {
// if(p->id = q->id)
// {
// L3->next = p;
// L3 = p;
// p = p->next;
// }else{
// L3->next = q;
// L3 = q->next;
// q = q->next;
// }
// }
// if(p)
// {
// L3->next = p;
// }else{
// L3->next = q;
// }
// return L3;
// }
int main()
{
LinkNode L1,L2;
int n,m;
init(&L1);
init(&L2);
scanf("%d %d",&n,&m);
create(&L1,n);
create(&L2,m);
// print(L1);
// print(L2);
concat(&L1,&L2);
sort(&L1);
// printf("+++++++++\n");
print(L1);
// LinkNode L3;
// L3 = sort(&L1,&L2);
// printf("++++++++++++++++\n");
// print(L3);
return 0;
}
void init(LinkNode *L)
{
*L = (LinkNode)malloc(sizeof(link));
(*L)->next = NULL;
}
void create(LinkNode *L,int n)
{
int id,score;
LinkNode r = *L;
for(int i = 0;i < n;i++)
{
link *p;
scanf("%d %d",&id,&score);
p = (link*)malloc(sizeof(link));
p->id = id;
p->score = score;
r->next = p;
r = p;
}
r->next = NULL;
}
void concat(LinkNode *L1,LinkNode *L2)
{
LinkNode p,q;
p = (*L1)->next;
while(p)
{
q = p;
p = p->next;
}
q->next = (*L2)->next;
free(*L2);
}
void sort(LinkNode *L1)
{
LinkNode p,q;
p = (*L1)->next;
for(p;p != NULL;p = p->next)
{
for(q = p;q != NULL;q = q->next)
{
int temp1,temp2;
if(p->id >= q->id)
{
temp1 = p->id; //比较后交换值,成绩也要交换
p->id = q->id;
q->id = temp1;
temp2 = p->score;
p->score = q->score;
q->score = temp2;
}
}
}
}
void print(LinkNode L)
{
LinkNode p = L->next;
while(p)
{
printf("%d %d\n",p->id,p->score);
p = p->next;
}
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复