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


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

    Time Limit: 1000 ms Memory Limit: 65536 KiB

    Problem Description

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

    Input

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

    Output

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

    Sample Input

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

    Sample Output

    1 14 21 23 26 28 45 50 66 99 100

    Hint

    不得使用数组!

    考链表的插入操作,比较之后将比较小的节点插入到新的节点后面,最后将剩余节点插入。

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    typedef struct node
    {
        int data;
        struct node *next;
    }link;
    
    link *newlink()
    {
        link *t;
        t = (link*)malloc(sizeof(link));
        t->next = NULL;
        return t;
    }
    
    link *create(int n)
    {
        link *head,*p,*q;
        int i;
        head = newlink();
        p = head;
        for(i=0;i<n;i++)
        {
            q = newlink();
            scanf("%d",&q->data);
            q->next = NULL;
            p->next = q;
            p = q;
        }
        return head;
    }
    
    link *Guibing(link *head1,link *head2)
    {
        link *r,*p,*q;
        p = head1->next;
        q = head2->next;
        head1->next = NULL;
        r = head1;
        while(p&&q)
        {
            if(p->data<q->data)
            {
                r->next = p;
                r = r->next;
                p = p->next;
            }
            else
            {
                r->next = q;
                r = r->next;
                q = q->next;
            }
        }
        if(p)
            r->next = p;
    
        if(q)
            r->next = q;
        return head1;
    }
    
    void show(link *head)
    {
        link *p;
        p = head->next;
        while(p)
        {
            if(p->next==NULL)
                printf("%d
    ",p->data);
            else
                printf("%d ",p->data);
            p = p->next;
        }
    }
    
    int main()
    {
        link *head1;
        link *head2;
        int m,n;
        scanf("%d%d",&m,&n);
        head1 = create(m);
        head2 = create(n);
        head1 = Guibing(head1,head2);
        show(head1);
        return 0;
    }
    
  • 相关阅读:
    正则表达式的一些符号
    备份 Repository Backup
    Delphi 文件类型
    superobject.pas 其他人修改的
    TCustomCombo.SetItemIndex(const Value: Integer);
    Error reading symbol file
    任务栏窗口列表
    找回已删除的文件或目录
    总目录
    在Mac下使用crontab执行定时脚本
  • 原文地址:https://www.cnblogs.com/luoxiaoyi/p/9726695.html
Copyright © 2020-2023  润新知