zoukankan      html  css  js  c++  java
  • 2202: 合并链表(线性表)

    2202: 合并链表(线性表)

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 169  解决: 95
    [提交][状态][讨论版][命题人:外部导入]

    题目描述

    (线性表)假设有两个按元素值递增次序排列的线性表,均以单链表形式存储。请编写算法将这两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表。

    输入

    输入长度n:5
    输入数据:1 2 5 6 8
    输入长度m:5
    输入数据:3 4 7 9 10

    输出

    10 9 8 7 6 5 4 3 2 1

    样例输入

    4
    7 9 10 11
    4
    8 12 13 14
    

    样例输出

    14 13 12 11 10 9 8 7 

    #include<cstdio>
    #include<iostream>
    #include<cstdlib>
    #define MAXN 110
    using namespace std;
    typedef int ElemType;
    typedef struct LNode
    {
        ElemType data;
        struct LNode * next;
    }LinkNode;
    
    ElemType a[MAXN], b[MAXN];
    LinkNode *L1, *L2, *L3;
    
    void CreateList(LinkNode *&L, ElemType a[], int n)
    {
        LinkNode *r, *s;
        L = (LinkNode *)malloc(sizeof(LinkNode));
        r = L;
        for(int i = 0; i < n; ++i)
        {
            s = (LinkNode *)malloc(sizeof(LinkNode));
            s->data = a[i];
            r->next = s;
            r = s;
        }
        r->next = NULL;
    }
    
    void MergeList(LinkNode *L1, LinkNode *L2, LinkNode *&L3)
    {
        LinkNode *pa = L1->next, *pb = L2->next, *r, *s;
        L3 = (LinkNode *)malloc(sizeof(LinkNode));
        r = L3;
        while(pa != NULL && pb != NULL)
        {
            if(pa->data < pb->data)
            {
                s = (LinkNode *)malloc(sizeof(LinkNode));
                s->data = pa->data;
                r->next = s;
                r = s;
                pa = pa->next;
            }
            else
            {
                s = (LinkNode *)malloc(sizeof(LinkNode));
                s->data = pb->data;
                r->next = s;
                r = s;
                pb = pb->next;
            }
        }
        while(pa != NULL)
        {
            s = (LinkNode *)malloc(sizeof(LinkNode));
            s->data = pa->data;
            r->next = s;
            r = s;
            pa = pa->next;
        }
        while(pb != NULL)
        {
            s = (LinkNode *)malloc(sizeof(LinkNode));
            s->data = pb->data;
            r->next = s;
            r = s;
            pb = pb->next;
        }
        r->next = NULL;
    }
    
    void TraverList(LinkNode *&L3)
    {
        LinkNode *p , *q;
        p = L3->next;
        L3->next = NULL;
        while(p != NULL)
        {
            q = p->next;
            p->next = L3->next;
            L3->next = p;
            p = q;
        }
        return ;
    }
    
    void DispList(LinkNode *L)
    {
        LinkNode *p = L->next;
        while(p != NULL)
        {
            cout << p->data << " ";
            p = p->next;
        }
        return ;
    }
    
    int main()
    {
        int n, m, i, j;
        LinkNode *r, *s;
        cin >> n;
        for(i = 0; i < n; ++i)
            cin >> a[i];
        CreateList(L1, a, n);
        cin >> m;
        for(i = 0; i < m; ++i)
            cin >> b[i];
        CreateList(L2, b, m);
        MergeList(L1, L2, L3);
        TraverList(L3);
        DispList(L3);
        return 0;
    }
    

      

  • 相关阅读:
    c#中Split等分割字符串的几种方法
    js中的null和undefined的区别
    限制CheckBoxList选中的数量
    js中的boolean原始类型和Boolean引用类型
    div漂浮在flash上面
    关于导出excel是经常出现的几个问题
    关于表的合并
    框架
    Js实现类似图片相册左右切换效果
    DNS域名系统
  • 原文地址:https://www.cnblogs.com/mjn1/p/10192727.html
Copyright © 2011-2022 走看看