7-2 两个有序链表合并(新表不含重复元素)

2023-10-27

C++ 7-2 两个有序链表合并(新表不含重复元素) (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

我的代码:

#include <iostream>
using namespace std;

typedef struct Node{
    int data;
    Node* next;
}Node,*LinkList;

int main(){
    LinkList S1 = new Node,S2 = new Node ,S3 = new Node;
    S1->next = NULL;
    S2->next = NULL;
    S3->next = NULL;
    
    int x;
    
    Node* p = S1;
    
    while(cin>>x&&x!=-1)
    {
        Node* s = new Node;
        s->data = x;
        s->next = NULL;
        p->next = s;
        p = p->next;
    }
    p = l2;
    
    while(cin>>x&&x!=-1){
        Node* s = new Node;
        s->data = x ;
        s->next = NULL;
        p->next = s;
        p = p->next;
        
    }
    p = S1->next;
    Node* p2 = S2->next;
    Node* p3 = S3;
    
    while(p&&p2){
        if(p->data <= p2->data){//取小的
            if(p->data != p3->data){//比较是否l3与l1有重复的元素
                p3->next = p;
                p3 = p;
                p = p->next;
                p3->next = NULL;
            }else{//若重复相等则跳过下一个节点
                p = p->next;
            }
        }else{
            if(p2->data != p3->data){//比较是否l3与l2有重复的元素
                p3->next = p2;
                p3 = p2;
                p2 = p2->next;
                p3->next = NULL;
            }else{//若重复相等则跳过下一个节点
                p2 = p2->next;
            }
        }
    }
    
    //64-88行代码作用是防止因L1与L2长度不同而漏并元素;即若去掉此段代码,则只能比较相同长度的链表,检测所给输入样例时,运行结果会少了一个10.
    if(p){
           while (p) {
            if(p->data!=p3->data){
            p3->next = p;
            p3 = p;
            p = p->next;
            p3->next = NULL;
            }else{
                p = p->next;
            }
            }

        }
        else if(p2){
            while (p2) {
            if((p2->data!=p3->data)){
            p3->next = p2;
            p3 = p2;
            p2 = p2->next;
            p3->next = NULL;//防止最后一个重复
            }else{
                p2 = p2->next;
            }
            }
        }
        
    p3 = S3;
    p3 = p3->next;
    if(p3==NULL){
        cout<<"NULL";
    }else{
        while(p3!=NULL){
                    if(p3->next == NULL)
                        cout<<p3->data;
                    else
                        cout<<p3->data<<" ";
                    p3 = p3->next;
                }
    }
    return 0;
}

本代码参考于网上的大佬。本人添加了一点注释。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

7-2 两个有序链表合并(新表不含重复元素) 的相关文章

随机推荐

  • 卷积神经网络学习利器CNN Explainer

    CNN解说员 一个交互式可视化系统 旨在帮助非专家了解卷积神经网络 CNN 有关更多信息 请查看我们的手稿 CNN 解释器 通过交互式可视化学习卷积神经网络 Wang Zijie J Robert Turko Omar Shaikh Hae
  • 华为eNSP 三层交换机配置使用vlan及ospf通信

    实验拓扑图如下 提前配置好主机ip地址及端口ip地址 备注 接PC 路由器 服务器的接口一般用access LSW8三层交换机的配置 sysname LSW8 vlan batch 20 30 40 interface Vlanif1 in
  • 对于std::vector的等号重载操作符的理解

    1 对于case 1 赋值重载 比如当前的vector的allocator type是这样的 std allocator traits
  • VS2015+Qt5.9.1+Mysql5.7.25开发环境搭建

    VS2015 Qt5 9 1 Mysql5 7 25开发环境搭建 版本信息 版本 作者 时间 备注 v0 1 ZY 2019 3 2 初稿 目录 文章目录 VS2015 Qt5 9 1 Mysql5 7 25开发环境搭建 版本信息 目录 一
  • 机器学习:LDA_数学基础_2:贝叶斯数学:先验分布的选择

    先验信息确定先验分布 主观概率 对事件似然比 专家意见 历史资料 无信息先验分布 贝叶斯假设 离散均匀分布 有限区间的均匀分布 广义分布 共轭先验分布 在已知样本的情况下 为了理论的需要 常常选择参数的分布为共轭先验分布 最大熵先验分布 无
  • fork父子进程共享

    fork之后 子进程会拷贝父进程的数据空间 堆和栈空间 实际上是采用写时复制技术 二者共享代码段 所以在子进程中修改全局变量 局部变量 分配在堆上的内存同样也是 后 父进程的相同的全局变量不会改变 见下面代码分析 include
  • python3.6 print同一行覆盖打印

    1 python3 6中 print同一行覆盖打印可以这样使用 通用 print r object end flush True 例子 print r loss G 0 3f format loss G item end flush Tru
  • overleaf latex常用指令

    文字 bf 加粗 textit 斜体 emph 强调文本 另外 百分号 双引号 前双引号点两次 左上角1旁边的键 后双引号点两次 enter旁边的键 注意 这个符号 有时候可能是中文的 报错 上标 字母 上标 下标 字母 下标 表格 宏包
  • 7.11项目进度

    学习内容 AE课程一节 复习回顾AE课程并整理笔记 学习时间 上午8 00 11 00 下午3 00 5 00 遇到问题 在学习和制作作业的过程中 我发现自己存在严重的学习知识不牢固的问题 因此在今后学习中 我会增加课堂笔记这一学习内容 从
  • 记一次静态工具类单元测试用例

    代码中有用到自己创建的工具类BeanContext来获取当前上下文 以下是代码 package com sap calm imp ca ana da util import org springframework beans BeansEx
  • centos7使用说明

    说在前面 俗话说好记性不如烂笔头 考虑到每次安装部署都要各种查阅资料 很是不便 故决定重头开始安装一遍常用服务 作为以后的参照 第一步 确定发行版本 安装系统 首先明确自己需要的版本 本人不习惯桌面版 作为服务器 推荐熟悉命令行系统 毕竟效
  • 2020年的第二周

    2020年的第2周 2020年1月6日 2020年1月12日 上周和朋友出去聚餐 A说让我们带着她炒股 她赚点小钱 我说我在玩基金 赚了个几百 C说 他爸爸定投基金10年每个月3000才赚了五万 要就赚大钱 不搞这些基金 我们就聊啊聊 比如
  • 基于STM32和超声波模块的超声波测距,使用OLED显示距离和温度(附详细源代码)

    1 HC SR04模块介绍 HC SR04模块优势 此模块性能稳定 测度距离精确 模块高精度 盲区小 产品应用领域 1 机器人避障 2 物体测距 3 液位检测 4 公共安防 5 停车场检测 超声波测距模块工作原理 1 采用IO口TRIG触发
  • Autofac +webapi 配置

    Autofac配置 using Autofac using System using System Collections Generic using System Linq using System Reflection using Sy
  • mybatis日志打印大杀器

    文章目录 前言 MybatisLogFormat 选项一 选项二 缺点 Mybatis Log Free 总结 前言 各位精通CRUD的老司机 相信大家在工作中mybatis或者mybatisplus使用的肯定是比较多的 那么大家或多或少都
  • List知识总结

    ArrayList 1 ArrayList扩容底层用到的是 System arraycopy 2 扩容的长度计算 int newCapacity oldCapacity oldCapacity gt gt 1 旧容量 旧容量右移1位 这相当
  • 鼠标右键 自定义

    1 在需要添加右键的页面 绑定contextmenu事件 阻止浏览器默认事件 添加自定义事件
  • 修改Linux内核参数,减少TCP连接中的TIME-WAIT

    一台服务器CPU和内存资源额定有限的情况下 如何提高服务器的性能是作为系统运维的重要工作 要提高Linux系统下的负载能力 当网站发展起来之后 web连接数过多的问题就会日益明显 在节省成本的情况下 可以考虑修改Linux的内核TCP IP
  • C笔记:指针数组 数组指针 指针函数 函数指针

    C语言中的重点 1 用变量a给出下面的定义 一个有10个指针的数组 该指针指向一个函数 该函数有一个整形参数并返回一个整型数 正确答案 int a 10 int int a 10 指向int类型的指针数组a 10 int a 10 指向有1
  • 7-2 两个有序链表合并(新表不含重复元素)

    C 7 2 两个有序链表合并 新表不含重复元素 20 分 已知两个非降序链表序列S1与S2 设计函数构造出S1与S2合并后的新的非降序链表S3 要求S3中没有重复元素 输入格式 输入分两行 分别在每行给出由若干个正整数构成的非降序序列 用