原题链接:[编程入门]链表合并
啊啊啊啊啊啊啊!!!好难啊!本辣鸡觉得链表好难(虽然还是参考了许多大佬的做法,写了出来)
和许多人的做法类似,分四步:创建链表,合并链表,对单个链表排序,打印链表
粘代码:
#include<bits/stdc++.h>
using namespace std;
struct note{
int id;
int score;
note * next;
};//其实我不知道为什么有的人会写上*node, Node,后面再用node声明函数的返还类型,我是让函数返还结构指针,欢迎指教QWQ
note * cre(int a);//创建链表
void prin(note * a);//打印链表
note * tog(note * a,note * b);//合并链表
void my_sort(note * a,int b,int c);//对单个链表排序
int main()
{
note * l1,*l2,*l3;
int m,n;
cin>>m>>n;
l1=cre(m);
l2=cre(n);
l3=tog(l1,l2);
my_sort(l3,m,n);
prin(l3);//我把函数的各个功能分开实现了
return 0;
}
note * cre(int a)
{
note * mj,* mo,* he;
he=(note *)malloc(sizeof(note));
he->next=NULL;
mo=he;//he作为头指针,地址不变
for(int i=1;i<=a;i++)
{
mj=(note *)malloc(sizeof(note));
mj->next=NULL;
cin>>mj->id>>mj->score;
mo->next=mj;
mo=mj;//插入新值
}
return he;//返还头指针
}
note * tog (note * a, note *b)
{
note * tmp = a;
while(tmp->next!=NULL)
tmp=tmp->next;//找到a的尾巴,将其与b的头部衔接起来
tmp->next=b->next;
return a;//这时候a即为l1,似乎与l3相同了,其实l3是可以不要的,就是说可以不返回指针的
}
void my_sort(note * a,int b , int c)
{
note * p;
int tmp1,tmp2;
for(int i=1;i<b+c;i++)
{
p=a+2;
while(p->next!=NULL)
{
if(p->id>p->next->id){
swap(p->id,p->next->id);
swap(p->score,p->next->score);
}
p+=2;//与p=p->next同义,效果一样如果这样写不规范,欢迎指教QWQ
}
}//冒泡排序
}
void prin( note * a)
{
note * b=a->next;
while(b!=NULL){
cout<<b->id<<" "<<b->score<<endl;
b=b->next;
}//打印
}
新手写题解,欢迎吐槽
9.9 分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复