解题思路:
手搓链表,首先输入a,b链表,初始化一个together链表备用。

写一个函数minid找到链表中id最小的并返回该结点地址,考察a,b两链表中id最小者,并加入together链表同时修改该id为999,循环。
注意事项:
找到了当前id最小者结点地址要加入together链表时,并不能直接链接该地址,而是要拷贝一份,并且该拷贝的next指针为NULL

参考代码:

#include<stdio.h>

#include<stdlib.h>

typedef struct student{

    int id;

    int score;

    struct student* next;

}Snode;

Snode* init(){

    Snode* temp=(Snode* )malloc(sizeof(Snode));

    temp->next=NULL;

    return temp;

}

void printnodes(Snode* x){

    Snode* ttemp=x;

    while(ttemp->next!=NULL){

        ttemp=ttemp->next;

        printf("%d %d\n",ttemp->id,ttemp->score);

    }

}

Snode* minid(Snode* x){

    int mintemp=x->next->id;

    Snode* minp=x->next;

    while(x->next!=NULL){

        x=x->next;

        if(mintemp>x->id){

            mintemp=x->id;

            minp=x;

        }

    }

    return minp;

}

int main()

{

    int N,M;

    scanf("%d %d",&N,&M);

    Snode* a=init();

    Snode* b=init();

    Snode* together=init();

    for(int i=1;i<=N;i++){

        Snode* temp=init();

        scanf("%d %d",&temp->id,&temp->score);

        Snode* ttemp=a;

        while(ttemp->next!=NULL){

            ttemp=ttemp->next;

        }

        ttemp->next=temp;

    }

    for(int i=1;i<=M;i++){

        Snode* temp=init();

        scanf("%d %d",&temp->id,&temp->score);

        Snode* ttemp=b;

        while(ttemp->next!=NULL){

            ttemp=ttemp->next;

        }

        ttemp->next=temp;

    }

    for(int i=1;i<=N+M;i++){

        Snode* temp=together;

        while(temp->next!=NULL){

            temp=temp->next;

        }

        Snode* minida=minid(a);

        Snode* minidb=minid(b);

        Snode* min=(minida->id)<(minidb->id)?minida:minidb;

        Snode* ttemp=init();

        ttemp->id=min->id;

        ttemp->score=min->score;

        temp->next=ttemp;

        min->id=999;

    }

    

    printnodes(together);

    free(a);

    free(b);

    free(together);

return 0;

}

点赞(0)
 

0.0分

1 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论