解题思路:1、先创建两个链表,用连接函数将两条链表连接起来
2、用冒泡排序法,将比较后的两个节点数据域进行交换
3、打印出链表,细节还是看代码吧
注意事项:注意连接链表需要前一个链表的最后一个节点,获取节点最好还是写个函数封装起来,这样看着更加清爽。还有冒泡排序中的循环条件不能搞错,尤其是内层。
参考代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct node{
int num;
int score;
struct node* next;
}Node,*Linklist;
Linklist Create_linklist(int x){//头插法创建链表
Node* L=malloc(sizeof(Node*));
L->next=NULL;
Node* p;
int i,n,m;
for(i=0;i<x;i++){
scanf("%d %d",&n,&m);
p=malloc(sizeof(Node*));
p->num=n;
p->score=m;
p->next=L->next;
L->next=p;
}
return L;
}
Node* get_lastnode(Linklist list){
Node* p;
p=list->next;
while(p->next!=NULL){//找链表的最后一个节点的条件需要是它的下一个节点不为空,因为它最后一个节点是有值的
p=p->next;
}
return p;
}
Linklist connect_linklist(Linklist list1,Linklist list2){
Linklist L=malloc(sizeof(Node*));
Node* p=get_lastnode(list1);//得到第一个节点的尾节点
Node* s=list2;//第二个节点的头节点
p->next=s->next;
free(s);
return list1;
}
void bubble_sort(Linklist list){//冒泡排序
Node* p=list->next;
Node* q=NULL;
int temp1;
int temp2;
while(p!=q){ //也可为 p->next!=q
while(p->next!=q){
if(p->num>p->next->num){//判断后进行数据交换
temp1=p->num;
p->num=p->next->num;
p->next->num=temp1;
temp1=p->score;
p->score=p->next->score;
p->next->score=temp1;
}
p=p->next;//每次内循环都将p往后移一个单位
}
q=p;//将p赋给q,用于外层循环的条件判断,提高程序效率,让排好的位置不再进入排序中
p=list->next;//将p重置为头节点
}
}
void print_Linklist(Linklist list){
Node* p=list->next;
while(p!=NULL){
printf("%d %d\n",p->num,p->score);
p=p->next;
}
}
int main(){
Linklist l;
Linklist L;
Linklist J;
int n,m;
scanf("%d %d",&n,&m);
l=Create_linklist(n);
L=Create_linklist(m);
J=connect_linklist(l,L);
bubble_sort(l);
// printf("排序后的数据:\n");
print_Linklist(l);
return 0;
}
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复