解题思路: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.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论