解题思路:

注意事项:

参考代码:

    #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分

0 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论