《面试准备》C++链表操作3(合并两个有序链表)

2023-11-18

#include <iostream>
#include <stack>
using namespace std;

//单向链表节点
struct ListNode{
    int value;
    struct ListNode *Next;
};

class MyList
{
public:
    ListNode *Head1;
    ListNode *Head2;
    ListNode *res;
public:
    MyList(){
        Head1 = new ListNode;
        Head2 = new ListNode;
        res = new ListNode;
    }
    ~MyList(){
        delete Head1;
        Head1 = NULL;
        delete Head2;
        Head2 = NULL;
        delete res;
        res = NULL;
    }
    void creatlist();
    ListNode* conbinelist();
    void bianli();
};

void MyList::creatlist(){
    ListNode *P1 = Head1;
    P1->value = 0;
    //创建Head1
    for(int i = 1;i<=2;i++){
        ListNode *tmp1 = new ListNode;
        tmp1->value = i*3;
        tmp1->Next =NULL;
        P1->Next = tmp1;
        P1 = tmp1;
    }
    ListNode *P2 = Head2;
    P2->value = -1;
    //创建Head2
    for(int j = 1;j<=3;j++){
        ListNode *tmp2 = new ListNode;
        tmp2->value = j+1;
        tmp2->Next =NULL;
        P2->Next = tmp2;
        P2 = tmp2;
    }
}

ListNode* MyList::conbinelist(){
    if(Head1==NULL)
        return Head2;
    if(Head2==NULL)
        return Head1;
    if(Head1->value<=Head2->value){
        res = Head1;
        Head1 = Head1->Next;
    }else{
        res = Head2;
        Head2 = Head2->Next;
    }
    ListNode *Head =res;
    while(Head1!=NULL&&Head2!=NULL){
        if(Head1->value<=Head2->value){
            Head->Next = Head1;
            Head = Head->Next;
            Head1 = Head1->Next;
        }
        else{
            Head->Next = Head2;
            Head = Head->Next;
            Head2 = Head2->Next;
        }
    }
    Head->Next = (Head1==NULL?Head2:Head1);
    return res;
}

void MyList::bianli(){
    ListNode* P =res;
    while(P!=NULL){
        cout<<P->value<<" ";
        P = P->Next;
    }
}
int main ()
{
    MyList *mylist = new MyList;        //自己定义一个对象
    mylist->creatlist();
    mylist->conbinelist();
    mylist->bianli();
    delete mylist;
    mylist = NULL;
    return 0;
}

补充:两个有序数组合并仍然有序(思路一样): 

#include <iostream>
#include <unordered_map>
using namespace std;


int* conbine(int a[],int b[]){
    int cnt1=0,cnt2=0,n=0;
    static int c[10]={0};   //静态变量,在函数结束时不会自动释放
    if(a[0]<=b[0]){
        c[0] = a[0];
        a++;
        cnt1++;
    }
    else{
        c[0] = b[0];
        b++;
        cnt2++;
    }
    while(cnt1<4&&cnt2<6){
        if(*a<=*b){
            c[++n] = *a;
            a++;
            cnt1++;
        }else{
            c[++n] = *b;
            b++;
            cnt2++;
        }
    }
    if(cnt1<4){
        for(int i=cnt1;i<4;i++){
            c[++n] = *a;
            a++;
        }
    }
    if(cnt2<6){
        for(int i=cnt2;i<6;i++){
            c[++n] = *b;
            b++;
        }
    }
    return c;
}

int main(){
    int a[4]={-1,3,5,7};
    int b[6]={-2,0,5,6,8,9};
    int *c = conbine(a,b);
    for(int i=0;i<10;i++){
        cout<<c[i]<<" ";
    }
    return 0;
}

或者进行指针操作:

#include <iostream>
#include <unordered_map>
using namespace std;


int* conbine(int a[],int b[]){
    int cnt1=0,cnt2=0;
    int *c=(int*)malloc(sizeof(int)*10);  //动态分配,在堆中
    if(*a<=*b){
        *c = *a;
        a++;
        cnt1++;
    }
    else{
        *c = *b;
        b++;
        cnt2++;
    }
    int *p = c;
    while(cnt1<4&&cnt2<6){
        if(*a<=*b){
            *(++p) = *a;
            a++;
            cnt1++;
        }else{
            *(++p) = *b;
            b++;
            cnt2++;
        }
    }
    if(cnt1<4){
        for(int i=cnt1;i<4;i++){
            *(++p) = *a;
            a++;
        }
    }
    if(cnt2<6){
        for(int i=cnt2;i<6;i++){
            *(++p) = *b;
            b++;
        }
    }
    return c;
}

int main(){
    int a[4]={-1,3,5,7};
    int b[6]={-2,0,5,6,8,9};
    int *c = conbine(a,b);
    for(int i=0;i<10;i++){
        cout<<c[i]<<" ";
    }
    return 0;
}

 

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

《面试准备》C++链表操作3(合并两个有序链表) 的相关文章

  • 确定非空列表条目是否“连续”的 Pythonic 方法

    我正在寻找一种方法来轻松确定列表中所有非 None 项目是否出现在单个连续切片中 我将使用整数作为非 None 项目的示例 例如 列表 None None 1 2 3 None None 满足我对连续整数条目的要求 相比之下 1 2 Non
  • 如何在 Flutter 中创建网络图像列表

    我使用 Carousel Pro 包在屏幕上实现轮播 在这个 Carousel 类中它需要一个图像列表 Carousel 类的语法是 Carousel images NetworkImage https cdn images 1 mediu
  • 从 Json Python 获取特定字段值

    我有一个 JSON 文件 我想做的是获取这个特定字段 id 问题是当我使用json load input file 它说我的变量data是一个列表 而不是字典 所以我不能做类似的事情 for value in data id print d
  • 在 C# 中枚举时从 List 中删除项目的智能方法

    我有一个经典的案例 尝试从集合中删除一个项目 同时在循环中枚举它 List
  • 在 Python 中使用列表理解来执行类似于 zip() 的操作?

    我是一名 Python 新手 我想做的事情之一就是围绕列表理解进行思考 我可以看到这是一个非常强大的功能 值得学习 cities Chicago Detroit Atlanta airports ORD DTW ATL print zip
  • Python如何拆分列表列表?

    我有一个清单清单 myList 1 2 3 4 5 6 7 8 9 10 我想将其分成三个单独的列表 每个列表都有自己的名称 a 1 2 3 b 4 5 6 c 7 8 9 10 我该怎么做呢 您可以直接解压它 a b c myList
  • Android 动态添加联系表单

    Hi 我想实现如图所示的表单 不知道他们如何动态添加字段 这是列表视图吗 可扩展列表 用户可以在运行时添加和删除 我已经检查了包含子项目的可扩展列表 但我们在数组中定义子元素 在图像中它们动态添加 任何指南 链接 Thanks Custom
  • 列表列中的设置操作

    我正在尝试做集合运算在存储在列表列中的向量之间 例如this https stackoverflow com questions 38712196 text file to dataframe with a list column DT l
  • 如何从字典列表中查找键的值?

    如何从字典列表中获取给定键的值 mylist powerpoint color blue client name Sport Parents Regrouped sort order ascending chart layout 1 cha
  • 有没有办法查看 OSGi 应用程序中注册的服务?

    我有一个运行 Equinox 的 OSGi 应用程序 我想查看该应用程序提供的服务 我怎样才能做到这一点 从 gogo shell 类型 inspect cap service 这将显示所有捆绑包注册的所有服务 如果您想显示特定捆绑包的服务
  • 比较和删除列表和数组java中不存在的元素

    我有一个String数组和一List
  • Python - 如何将列表保存为图像?

    我生成一个常规列表 是否可以将此列表保存为 JPEG 图像或 PNG 或其他格式 以便我可以打开图像并查看它 我目前正在尝试使用 python 成像库 PIL 来解决这个问题 这是可能的解决方案之一 使用以下方法创建一个空图像对象 Imag
  • 在Python中将整数附加到列表的开头[重复]

    这个问题在这里已经有答案了 如何在列表的开头添加一个整数 1 2 3 42 1 2 3 gt gt gt x 42 gt gt gt xs 1 2 3 gt gt gt xs insert 0 x gt gt gt xs 42 1 2 3
  • List.Clear() 在 C# 中是如何实现的?

    我假设它使用数组来实现 List 怎么List Clear 实施的 它实际上清理了数组还是只是为此列表创建了一个新数组 public class List private Array array public void Clear1 arr
  • 在Python中创建N*N*N列表时出现问题

    我正在尝试创建一个 3 维 NNPython 中的 N 列表 如下所示 n 3 l 0 n n n 不幸的是 这似乎没有正确地 克隆 列表 正如我所想的那样 gt gt gt l 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  • 使用 sapply 的列表和矩阵

    我有一个也许是基本的问题 我在网上搜索过 我在读取文件时遇到问题 尽管如此 我还是按照 Konrad的建议设法读取了我的文件 我很欣赏这一点 How to get R to read in files from multiple subdi
  • Python:两个列表之间的成对比较:列表 a >= 列表 b?

    如果我想检查列表中的所有元素 a 1 2 3 6 大于或等于另一个列表中对应的元素 b 0 2 3 5 如果 a i gt b i 对于所有i的 则返回 true 否则返回 false 这有逻辑功能吗 比如a gt b 谢谢 你可以这样做
  • 如何在 Haskell 中向右或向左移动列表的 1 个元素?

    嗨 我一直在寻找答案 但找不到 假设我们有一个像这样的列表 1 10 4 5 3 我怎样才能将 5 向左移动 使这个列表变成 1 10 5 4 3 我尝试过了swapElementsAt通过找到该元素的索引 但它看起来非常不足 swapEl
  • 在python中组合2个列表

    我有 2 个列表 每个列表大小相同 并且有兴趣将这两个列表组合起来并将其写入文件中 alist 1 2 3 5 blist 2 3 4 5 结果列表应该是这样的 1 2 2 3 3 4 5 5 之后我希望将其写入文件 我怎样才能做到这一点
  • Django查询:如何过滤对象以排除列表中的id?

    如何在查询中进行过滤 以便结果排除 ID 属于列表的任何对象实例 可以说我有 object id list 1 5 345 MyObject objects filter Q time gte datetime now Q what to

随机推荐

  • 无偏估计的数学证明和分析

    最近学习PCA 在求最大化方差 2 1 P 1
  • 自动化测试高频面试题-90%可能会被问到

    Hello 你们的好朋友九九又又又来了 今天猜猜我给大家带来点啥干货呢 最近很多小伙伴出去面试的时候经常会被问到跟自动化测试相关的面试题 所以 今天九九特意给大家整理了一些经常被公司问到的自动化测试相关的面试题 停 咱先收藏起来好吗 别到时
  • js中过一段时间后终止while循环,防止死循环的方法

    今天发现了一个比较有趣的事 相信很多人遇到过写while循环时 在测试时很容易陷入死循环 导致要关闭页面再重启才能继续测试 那如果频繁调试 就每死循环一次就重启一次 很烦 所以想写一个到一定时间就终止循环的函数 刚开始用setTimeout
  • rhel8订阅注册激活

    先注册账号进行订阅 注册系统 https www howtoing com enable rhel subscription in rhel 8
  • JDK1.8的新特性(详细总结)

    目录 前言 一 jdk8简介 二 Lambda表达式语法 函数式接口 三 jdk8 内置四大核心函数接口 消费型接口 海王式接口 只知道索取 供给型接口 舔狗式接口 只知道付出 不索取回报的 函数型接口 双向奔赴 有输入有输出 断言型接口
  • C语言上机实验思路分享5

    实验内容 方法和步骤 1 编写一个函数 由实参传来一个整数n 将它各个位上的数字逆序输出 例如输入 123 输出为321 2 求方程ax 2 bx c O的根 用3个函数分别求当 b 2 4ac大于0 等于0和小于0时的根 并输出结果 从主
  • js使用AjaxFileupload插件实现文件上传

    最近做项目 需要上传表单元素中的文件POST到目标URL 并把得到的数据显示到本页面上 而不跳转到目标URL 那么 现在就要明确两件事 1 不能直接提交表单 因为一旦点击submit就会自动跳转到action界面 2 可以选择ajax进行异
  • Spring boot 整合 log4j2日志、程序异常,发送邮件通知

    官方文档 https logging apache org log4j 2 x 1 Maven修改如下
  • html 元素平滑滚动到某一位置

    在网上查了大半天 有人用高度算 然后setTimeout的 那个观感真的是差到家了 还有人说用 js动画库的 其实很简单 直接用window scrollTo 这个方法就完事了 回到顶部 window scrollTo top 0 beha
  • 【Java】5大排序算法总结(插入排序+希尔排序+选择排序+堆排序+冒泡排序)

    快速导航 1 稳定性 2 插入排序 3 希尔排序 4 选择排序 5 堆排序 6 冒泡排序 1 稳定性 两个相等的数据 如果经过排序后 排序算法能保证其相对位置不发生变化 则我们称该算法是具备稳定性的排序算法 图中排序后a仍然在b前面 此时这
  • Spring的两种代理方式:JDK动态代理和CGLIB动态代理

    代理模式 代理模式的英文叫做Proxy或Surrogate 中文都可译为 代理 所谓代理 就是一个人或者一个机构代表另一个人或者另一个机构采取行动 在一些情况下 一个客户不想或者不能够直接引用一个对象 而代理对象可以在客户端和目标对象之间起
  • Dalvik虚拟机简要介绍和学习计划

    通过修改 android framework base core jni AndroidRuntime cpp 中的 property get dalvik vm heapsize heapsizeOptsBuf 4 16m 来修改 dal
  • 电脑连接蓝牙耳机还是外放,输出设备只有扬声器怎么解决?

    1 问题描述 电脑连接蓝牙耳机耳机后 声音依然外放 输出设备只有扬声器 添加输出设备也找不到蓝牙耳机 2 排查问题 如果大家遇到的问题与我不同 还请查阅其他文章 右键计算机图标 gt 管理 gt 设备管理器 gt 声音 视频和游戏控制器 发
  • 神经网络应用: 手写数字识别(MNIST数据集)

    1 前言 本文使用 tensorflow 2 10 0 版本构建神经网络模型并进行训练 不同版本之间的 API 可能会有不同 请选择合适的版本学习 2 MNIST 数据集介绍 MNIST数据集 Mixed National Institut
  • 高性能计算(HPC)和智能计算理解

    1 现代终端设备一般都跟云端服务器相连 但只要可能 我们都希望计算可以在本地终端解决 这样做的好处是多方面的 既可以减小网络带宽的压力 又可以避免网络传输产生的时延 还可以让用户的数据更安全 现代终端设备一般用一个片上系统 SoC 做计算
  • Docker安装MinIO详细步骤

    本篇博客主要记录在Docker当中安装MinIO 目录 一 查看docker环境是否正常 二 下载minIO的镜像 三 创建minIO容器 四 访问地址 五 安装遇到问题 1 问题一 2 问题二 3 问题三 一 查看docker环境是否正常
  • Ubuntu18 04安装QQ

    Ubuntu18 04安装QQ Created time December 20 2022 5 12 PM Last edited time December 20 2022 6 15 PM Tags QQ Ubuntu18 04 截图工具
  • Flutter 第三方SDK集成(友盟统计,极光推送,百度地图)

    友盟统计 Flutter SDK集成 首先创建一个项目 接着去友盟工作台添加应用 添加成功后会得到AppKey 集成友盟 Flutter SDK 下载Demo Demo地址 https developer umeng com api sdk
  • Java实现多线程下载

    思路 1 基本思路是将文件分段切割 分段传输 分段保存 2 分段切割用到HttpUrlConnection对象的setRequestProperty Range bytes start end 方法 3 分段传输用到HttpUrlConne
  • 《面试准备》C++链表操作3(合并两个有序链表)

    include