zoukankan      html  css  js  c++  java
  • 数据结构实验之链表四:有序链表的归并

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

    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;
    }
    


    每天训练发现我比别人做的好慢,但是理解的更深刻,如果一开始学一个新知识点就搜模板,那么这样的人是走不远的,毕业之后带走的只有思维,什么荣誉,奖杯都已经不重要了。
  • 相关阅读:
    hdu 6702 ^&^ 位运算
    hdu 6709 Fishing Master 贪心
    hdu 6704 K-th occurrence 二分 ST表 后缀数组 主席树
    hdu 1423 Greatest Common Increasing Subsequence 最长公共上升子序列 LCIS
    hdu 5909 Tree Cutting FWT
    luogu P1588 丢失的牛 宽搜
    luogu P1003 铺地毯
    luogu P1104 生日
    luogu P1094 纪念品分组
    luogu P1093 奖学金
  • 原文地址:https://www.cnblogs.com/6bing/p/3931260.html
Copyright © 2011-2022 走看看