解题思路: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 人评分
WU-蓝桥杯算法提高VIP-Quadratic Equation (C++代码)浏览:1742 |
【偶数求和】 (C语言代码)浏览:556 |
C语言程序设计教程(第三版)课后习题7.2 (C语言代码)浏览:798 |
C语言程序设计教程(第三版)课后习题6.8 (C++代码)浏览:575 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:539 |
C二级辅导-公约公倍 (C语言代码)浏览:1310 |
【偶数求和】 (C++代码)浏览:698 |
整数分类 oj上总是wrong answer浏览:663 |
平方数问题,oj一直是wrong answer浏览:738 |
纪念品分组 (C++代码)浏览:836 |