• 数据结构实验之链表四:有序链表的归并


    数据结构实验之链表四:有序链表的归并

    Time Limit: 1000MS Memory limit: 65536K

    题目描述

    分别输入两个有序的整数序列(分别包含M和N个数据),建立两个有序的单链表,将这两个有序单链表合并成为一个大的有序单链表,并依次输出合并后的单链表数据。

    输入

    第一行输入M与N的值;
    第二行依次输入M个有序的整数;
    第三行依次输入N个有序的整数。

    输出

    输出合并后的单链表所包含的M+N个有序的整数。

    示例输入

    6 5
    1 23 26 45 66 99
    14 21 28 50 100

    示例输出

    1 14 21 23 26 28 45 50 66 99 100

    提示

    不得使用数组!

    #include<stdio.h>
    #include<stdlib.h>
    
    struct node
    {
        int data;
        struct node *next;
    };
    
    struct node *merge(struct node *head1, struct node *head2)
    {
        struct node *tail, *p1, *p2;
        p1 = head1->next;
        p2 = head2->next;
        tail = head1;
        free(head2);
        while(p1 && p2)
        {
            if(p1->data < p2->data)
            {
                tail->next = p1;
                tail = p1;
                p1 = p1->next;
            }
            else
            {
                tail->next = p2;
                tail = p2;
                p2 = p2->next;
            }
        }
        if(p1)
            tail->next = p1;
        else
            tail->next = p2;
    
        return (head1);
    
    }
    int main()
    {
        int n, m, i;
        struct node *head1, *head2, *tail1, *tail2, *p1, *p2, *turn;
        head1 = (struct node *)malloc(sizeof(struct node));
        head2 = (struct node *)malloc(sizeof(struct node));
        tail1 = head1;
        tail2 = head2;
        head1->next = NULL;
        head2->next = NULL;
        scanf("%d %d", &n, &m);
        for(i=0; i<n; i++)
        {
            p1 = (struct node *)malloc(sizeof(struct node));
            scanf("%d", &p1->data);
            tail1->next = p1;
            p1->next = NULL;
            tail1 = p1;
        }
        for(i=0; i<m; i++)
        {
            p2 = (struct node *)malloc(sizeof(struct node));
            scanf("%d", &p2->data);
            tail2->next = p2;
            tail2 = p2;
            p2->next = NULL;
        }
    
       turn = merge(head1, head2);
       turn = turn->next;
    
         for(i=0; i<n+m; i++)
        {
            printf("%d", turn->data);
            if(i==n+m-1)
                printf("
    ");
            else
                printf(" ");
    
            turn = turn->next;
        }
    
        return 0;
    }
    


    每天训练发现我比别人做的好慢,但是理解的更深刻,如果一开始学一个新知识点就搜模板,那么这样的人是走不远的,毕业之后带走的只有思维,什么荣誉,奖杯都已经不重要了。
  • 相关阅读:
    IE 浏览器版本切换
    NOIP 模拟赛 简单题
    NOIP 模拟赛 左右横跳
    [LNOI2014]LCA
    JZOJ 4216.平方和
    [ZJOI2013]K大数查询
    JZOJ 3207.Orthogonal Anagram
    【模板】笛卡尔树
    hadoop 之 某一个datanode启动失败(Initialization failed for Block pool <registering> (Datanode Uuid unassigned) service to)
    java对象的序列化与反序列化
  • 原文地址:https://www.cnblogs.com/6bing/p/3931260.html
Copyright © 2020-2023  润新知