合并两个排序的链表(递归&非递归)

合并两个排序的链表使之依然有序(不开辟新空间在原链表上操作的非递归版本) ListNode* Merge(ListNode* pHead1, ListNode* pHead2) { if ( NULL ==pHead1 ) return pHead2; else if ( NULL == pHead2 ) return pHead1; ListNod 阅读详情

题目描述

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

(1)递归版本

/*
struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :
			val(x), next(NULL) {
	}
};*/

class Solution 
{
public:
    ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
    {
        
       
       if(nullptr == pHead1) 
           return pHead2;
          if(nullptr == pHead2) 
           return pHead1;
        if(pHead1->val > pHead2->val)
        {
            pHead2->next = Merge(pHead1,pHead2->next);
            return pHead2;
        }
        else
        {
            pHead1->next = Merge(pHead1->next,pHead2);
            return pHead1;
        }
        
    }
};

(2)非递归版本

/*
struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :
			val(x), next(NULL) {
	}
};*/

class Solution 
{
public:
    ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
    {
        
        //非递归
        if(nullptr == pHead1 && nullptr == pHead2)
            return nullptr;
        ListNode * pHead = new ListNode(0);
        ListNode * cur = pHead ;
        while(true)
        {
            if(nullptr == pHead1)
            {
                cur->next =pHead2;
                break;
            }
            else if(nullptr == pHead2)
            {
                cur->next = pHead1;
                break; 
            }
             if(pHead1->val > pHead2->val)
                swap(pHead1, pHead2);
            cur->next = pHead1;
            cur = cur->next;
            pHead1 = pHead1->next;
    }
         return pHead->next;
    }
};

点击练习:合并两个排序的链表

c语言学习之排序 数据结构 链表 堆排序 希尔排序 快速排序 递归排序 C 排序 数据结构 链表 堆排序 希尔排序 快速排序 递归排序。详细解释了每个排序方法原理,并带有程序代码。是学习C语言的绝好资料 立即下载

相关推荐

统信UOS V20 安装mysql5.7.42详细教程

到bin/下,执行下面的命令,初始化mysql服务信息,得到数据库的初始密码,实际如果目录不一样记得换成自己的目录。下载后通过远程将安装包上传至服务器,我这里将安装包上传至/usr/local/mysql 下。ps:这时候如果还是不能远程访问的话,可能是防火墙的原因,命令行执行以下命令即可。再次登录,发现缺少 libtinfo.so.5文件,再次建立软连接。登录,发现报错,提示缺少libncurses.so.5文件,使用。创建 /var/lib/ 下mysql目录。登录成功,修改密码,设置远程访问。

为谁伫立在风中 1万+

LeetCode[21]合并两个有序链表【递归方法&非递归方法】

合并两个有序数组 方法一:递归方法 两个链表头部值较小的一个节点与剩下元素的merge操作结果合并 时间复杂度:O(m+n),因为每次递归调用函数都会去掉list1或者list2的头节点,之道至少有一个链表为空,函数至多只会调用每个节点一次,所以时间复杂度取决于合并后的链表长度,所以时间复杂度为O(m+n) 空间复杂度:O(m+n) ,其中m和n为链表长度,递归调用函数时需要消耗栈空间,栈空间的大小取决于递归调用的深度,结束递归调用mergeTwoLists函数最多调用m+n次,所以空间

Alice_7310的博客 997

基于IC617下Layout XL的使用

基于IC617下Layout XL的使用

weixin_43816759的博客 1万+

牛客之合并两个排序的链表(非递归写法)

题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* Me...

qq_26796849的博客 196

TSMaster二次开发实战:如何用Python搞定CAN/CANFD事件回调(附完整代码)

本文详细介绍了如何利用Python进行TSMaster二次开发,实现CAN/CANFD事件回调功能。通过实战代码演示,讲解了预发送与后处理回调的核心区别、注册流程、资源管理及性能优化技巧,帮助工程师高效构建自动化测试与数据监控应用。

star的博客 668

Open3D 点到面的ICP配准算法【2025最新版】

点到面的ICP(python版本)博客长期更新,本文最近一次更新时间为:2025年2月2日,代码已更新至Open3D 0.18.0版本。

点云侠的博客 38万+

[剑指offer]合并两个排序链表(非递归,递归)

题目: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 思路: 非递归: 定义链表指针p1,p2 首先 做个判断 将链表头的值较小的赋给p1 , 另外一个则赋给p2 然后两个链表的数值作比较 将p2链表的元素依次插入p1链表中 // 其中有几个小细节需要注意 : 看代码注释 递归: 递归的方法就很容易让人懂了 首先定...

enemyfloggers的博客 222

《HiVT: Hierarchical Vector Transformer for Multi-Agent Motion Prediction》论文阅读之HiVT

目录摘要1.介绍2.相关工作3.方法3.1. 总体框架3.2 场景表示 3.3 分层向量Transformer3.3.1 局部编码器3.3.2 全局交互模块3.3.3 多模态未来解码器3.4 训练4.实验4.1 实验设置4.2 消融研究 4.3. 结果5.结论 准确预测周围交通参与者的未来运动对于自动驾驶车辆的安全至关重要。最近,矢量化方法由于能够捕捉交通场景中的复杂交互而在运动预测领域占据主导地位。然而,现有的方法忽略了问题的对称性并且受到昂贵的计算成本的影响,面临着在不牺牲预测性能的情况

Gavinmiaoc的博客 3339

合并两个有序链表

题目:输入两个单调递增的链表pHead1和pHead2,输出两个链表合成后的链表,需要合成后的链表满足单调不减规则 方法一:非递归合并   两个指针分别从链表头开始,以其中一个链表为基准链,将另一个链表结点不断插入到基准链的适当结点之前。   这里以 p = pHead1, q = pHead2; 并且以 pHead1链表为基准链,将pHead2结点插入到pHead1。 判断过程...

dong02084的专栏 174

Linux存储软件栈剖析之第5篇:F2FS文件系统

F2FS是三星专为NAND闪存设计的开源文件系统,通过异地更新、磨损均衡等机制优化闪存特性。其架构采用层次化存储管理(Block→Segment→Section→Zone)和多日志区域设计,基于数据热度分类(热/温/冷数据)提升性能。核心创新包括节点地址表(NAT)解决级联更新问题,以及基于成本的垃圾回收算法。F2FS通过检查点机制确保崩溃一致性,并利用并行访问能力充分发挥闪存性能优势,显著降低写放大效应,延长设备寿命。

指尖动听知识库 198

MTK AWB 色温曲线的进一步猜想

平均距离来判断是否对该色温下白平衡进行全部收白处理,还是保留一些光源的本身的颜色。比如占据图像一大半左右的纯色背景,纵坐标值相对横坐标的距离应该会比较大,大于一般场景下的正常白点分布。反之,位于Plank_curve下方位置的点具有偏洋红色的倾向。此时拟合各个色温下的白点,拟合曲线大致是以X= 0.85)平行于横轴的一条直线。对原始坐标系中的点取对数后的Log坐标系空间。此时拟合各个色温下的白点,拟合曲线大致呈现的是一条直线。,可以认为是各种色温下白点分布所呈现的走向。的算法利用某个色温点的偏离。

大熊 721

LeetCode21——————合并两个有序链表 python (递归非递归)

如题 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入: 1-> 2-> 4,1 -> 3-> 4 输出: 1-> 1-> 2-> 3-> 4-> 4 思路 : 1. 若都为空则直接返回空 2.若一个为空另一个不为,则直接返回另一个非空 3.非递归:建立一个新头结点...

bibigod的博客 915

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

LeetCode-合并两个有序链表(递归和非递归两种解题方式)

题目: 将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/merge-two-sorted-lists ...

小名同学 20万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

【链表】C++链表创建、删除、排序,合并

实现C++链表的创建、删除、排序、合并(保持单调不减) 思路: 方法1:如果将两链表头尾相接后再整体排序,复杂度太高。因此可以利用链表已经排好序的特点进行逐步合并。用两个指针p1、p2指向两链表头结点head1、head2,并比较,显然,值小的为合并链表的头结点head,假如p1值较小,p1=head, p1后移,再与p2比较,值小的并入合并链表,并且指针加1,依次类推,直到某一个链表为空后,

HiPricilla的博客 9011

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

剑指Offer对答如流系列 - 合并两个排序的链表

文章目录面试题25:合并两个排序的链表一、题目描述二、问题分析三、问题解答(1)非递归(2)递归 面试题25:合并两个排序的链表 一、题目描述 输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。 链表结构: public class ListNode { int val; ListNode next=null; List...

明月沉江春雾晓 3315

合并两个有序链表--链表的递归处理

0x01.问题 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 输入示例:1->2->4, 1->3->4 输出示例:1->1->2->3->4->4 C++结构体为: /** * Definition for singly-linked list. * struct ListNode { ...

ATFWUS的博客 1234

合并两个有序链表(递归/非递归) java

题目描述 题目地址: https://leetcode-cn.com/problems/merge-two-sorted-lists/ 要求:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例一: 输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4] 示例二: 输入:l1 = [], l2 = [] 输出:[] 示例三: 输入:l1 = [], l2 = [0] 输出:[0] 提示: 两个

qq_62939743的博客 751

(非递归不懂)合并两个排序的链表

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 递归版本 public ListNode Merge(ListNode list1, ListNode list2) { if (list1 == null) retu...

181

《剑指offer》合并两个排序的链表

题目 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 思路1 递归 这题要用递归,得先把画图把规律找出来。如果表1当前值小于表2当前值,表1当前值成为新链表的表头,否则返回表2的当前值作为新链表的表头。 例子: 表1 1>2>6>8 表2 5>8 当表1当前值 1< 表2当前值 5 表1的值 ...

gsch_12的博客 2453

合并两个有序链表,将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

合并两个有序链表,将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

weixin_43741253的博客 2746

面试题17:合并两个有序链表,递归和非递归实现

递归和非递归的方法合并两个有序链表。

wakaka的博客 1200

合并两个排序的链表——JS递归和非递归版本

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 /*function ListNode(x){ this.val = x; this.next = null; }*/ function Merge(pHead1, pHead2) { if(pHead1 === null){ return pHead2; }else if(...

Jane_96的博客 535

合并两个有序链表,递归和非递归,Java实现

package DataStructure.linkedlist; /** * Created on 2019/9/25 15:50 * 合并两个有序的单链表 * * @author Haiyang He * @version 1.0 */ public class MergeOrderLinkedList { /** * 以递归的方式合并两个有序的单链表 ...

qq_27512741的博客 419

合并两个有序链表 c语言 递归与非递归

将两个升序链表合并成一个升序链表,新链表是给定两个链表的节点组成的 递归 struct ListNode { int val; struct ListNode *next; }; struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) { if(NULL==l1) return l2; if(NULL==l2) return l1; if(l1->val<=l2-

cleverlemon的博客 715

合并两个排序的链表(Java实现)

合并两个排序的链表题目描述解析思路代码附录 题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 解析思路 首先读题想到的就是非递归思想:定义两个指针p,q分别指向这个两个链表的第一个元素,然后初始化一个mergelist空链表;接下来只需循环比较p和q指向元素的数据大小即可(两个指针都非空的情况)。最后要考虑的情况是循环结束后,p和q都有可能有一个没有遍历结束,因此还要加上一个判断条件将剩余元素附加到合并后的链表。 还有一个思路就是利用递归的思想,具体看代

梦中注定的博客 1272
上一篇: 详解递归思想
下一篇: 两种排序方法
dreamispossible
博客等级 码龄9年 265粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值