解题思路:

注意事项:

参考代码:

#include<iostream>

using namespace std;

typedef int Status;

typedef struct lnode

{

    int sno;

    int grade;

    struct lnode* next;

}lnode, * linklist;

Status init_list(linklist& l)

{

    l = new lnode;

    l->next = NULL;

    return 0;

}

void create_list(linklist& l, int n)

{

    lnode * r = l;

    for (int i = 0; i < n; i++)

    {

        lnode* p = new lnode;

        cin >> p->sno >> p->grade;

        r->next = p;

        p->next = NULL;

        r = p;

    }

}

void fun(linklist& l)//无序单链表从小到大的排序

{

    lnode* p, * q;

    p = l->next;

    while (p != NULL)

    {

        q = p->next;

        while (q != NULL)

        {

            if (q->sno < p->sno)

            {

                int t = q->sno;

                q->sno = p->sno;

                p->sno = t;

                int m = q->grade;

                q->grade = p->grade;

                p->grade = m;

            }

            q = q->next;

        }

        p = p->next;

    }

}

void insert_list(linklist& l1, linklist& l2) //将无序链表插入到有序链表当中

{

    lnode* p = l1->next;

    lnode* q = l2->next;

    lnode* m, * n=l1;

    while (q != NULL)

    {

        if (q->sno <= p->sno)

        {

            m = q->next;

            q->next = p;

            l1->next = q;

            p = q;

            q = m;

        }

        else

        {

            while (q->sno > p->sno && p->next != NULL)

            {

                n = p;

                p = p->next;

            }

            if (q->sno < p->sno)//当l1链表中有元素大于q结点的内容时,将q结点插在l1链表中间

            {

                m = q->next;

                q->next = p;

                n->next = q;

                q = m;

                p = l1->next;

            }

            else //当l2链表中的元素大于l1链表中所有的元素时,将该结点插在l1链表的末尾

            {

                m = q->next;

                p->next = q;

                q->next = NULL;

                q = m;

            }

        }

    }

}

void print(linklist l)

{

    lnode* p = l->next;

    while (p != NULL)

    {

        cout << p->sno << ' ' << p->grade << endl;

        p = p->next;

    }

}

int main()

{

    linklist l1, l2;

    init_list(l1);

    init_list(l2);

    int n, m;

    cin >> n >> m;

    create_list(l1, n);

    create_list(l2, m);

    fun(l1);

    insert_list(l1, l2);

    print(l1);

    return 0;

}


点赞(0)
 

0.0分

1 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论