viency13 2023-04-09 22:50 采纳率: 68.8%
浏览 14
已结题

是哪里考虑漏了吗,有两个测试点过不去哎

7-4 两个有序链表合并(新表不含重复元素)
分数 20
作者 陈晓梅
单位 广东外语外贸大学
已知两个非降序链表序列S1与S2,设计函数构造出S1与S2合并后的新的非降序链表S3。
要求S3中没有重复元素。

输入格式:
输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。

输出格式:
在一行中输出合并后新的非降序链表,要求链表中没有重复元素。数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL。

输入样例:
在这里给出一组输入。例如:

1 3 3 5 8 -1
2 3 4 6 8 10 -1
输出样例:
在这里给出相应的输出。例如:

1 2 3 4 5 6 8 10
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB


```c++
#include <iostream>
using namespace std;
typedef struct Lnode
{
    int data;
    struct Lnode *next;
} Lnode, *Linklist;

void creat_a(Linklist &La)
{
    La = new Lnode;
    La->next = NULL;
    Linklist p, q = La;
    while (1)
    {
        p = new Lnode;
        cin >> p->data;
        if (p->data == -1)
        {
            return;
        }
        p->next = NULL;
        q->next = p;
        q = p;
    }
}

void creat_b(Linklist &Lb)
{
    Lb = new Lnode;
    Lb->next = NULL;
    Linklist p, q = Lb;
    while (1)
    {
        p = new Lnode;
        cin >> p->data;
        if (p->data == -1)
        {
            return;
        }
        p->next = NULL;
        q->next = p;
        q = p;
    }
}

void init (Linklist &Lc)
{
    Lc = new Lnode;
    Lc->next = NULL;
}

void Mergelist(Linklist &La, Linklist &Lb, Linklist &Lc)
{
    Linklist pa, pb, pc;
    pa = La->next;
    pb = Lb->next;
    pc = Lc = La;
    while ( pa && pb )
    {
        if ( pa->data <= pb->data  )
        {
            if ( pc->data != pa->data )
            {
                pc->next = pa;
                pc = pa;
                pa = pa->next;
            }
            else
            {
                pa = pa->next;
            }
        }
        else
        {
             if ( pc->data != pb->data )
            {
                 pc->next = pb;
                 pc = pb;
                 pb = pb->next;   
            }
            else 
            {
                pb = pb->next;
            }
        }
    }
    if ( pa == NULL )
    {
        while ( pb != NULL )
        {
            if ( pc->data != pb->data )
            {
                pc->next = pb;
                pc = pb;
                pb = pb->next;
            }
            else
            {
                 pb = pb->next;
            }
        }
        
    }
    else
    {
        while ( pa != NULL )
        {
            if ( pc->data != pa->data )
            {
                pc->next = pa;
                pc = pa;
                pa = pa->next;
            }
            else
            {
                pa = pa->next;
            }
        }
    }
    delete Lb;
}

void Print(Linklist Lc)
{
    Linklist p = Lc->next;
    if ( p == NULL )
    {
        cout << "NULL";
    }
    while (p != NULL)
    {
        cout << p->data;
        if (p->next != NULL)
        {
            cout << " ";
        }
        p = p->next;
    }
}
int main()
{
    Linklist La, Lb, Lc;
    creat_a(La);
    creat_b(Lb);
    init(Lc);
    Mergelist(La, Lb, Lc);
    Print(Lc);
    printf ("\n");
    return 0;
}
 


```

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-04-10 08:22
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7797992
    • 除此之外, 这篇博客: 数据结构笔记10:求两个升序序列的中位数的三种方法(归并排序你会用了吗?)中的 题目:一个长度为L (L>=1)的升序序列S,处在第[L/2]个位置的数称为S的中位数。例如,若序列S1=(11, 13, 15, 17, 19),则S1的中位数是15,两个序列的中位数是含它们所有元素的升序序列的中位数。例如,若S2= (2, 4,6,8, 20),则S1和S2的中位数是11。现在有两个等长升序序列A和B,试设计一个在时间和空间两方面都尽可能高效的算法,找出两个序列A和B的中位数。要求: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
      1. 给出算法的基本设计思想。
      2. 根据设计思想,釆用C或C++或Java语言描述算法,关键之处给出注释。
      3. 说明你所设计算法的时间复杂度和空间复杂度。

      该题为2011年研究生考试计算机联考真题。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月28日
  • 已采纳回答 8月20日
  • 创建了问题 4月9日

悬赏问题

  • ¥15 在matlab中Application Compiler后的软件无法打开
  • ¥15 想问一下STM32创建工程模板时遇到得问题
  • ¥15 Fiddler抓包443
  • ¥20 Qt Quick Android 项目报错及显示问题
  • ¥15 而且都没有 OpenCVConfig.cmake文件我是不是需要安装opencv,如何解决?
  • ¥15 oracleBIEE analytics
  • ¥15 H.264选择性加密例程
  • ¥50 windows的SFTP服务器如何能批量同步用户信息?
  • ¥15 centos7.9升级python3.0的问题
  • ¥15 安装CentOS6时卡住