链表合并

单链表的合并(交叉合并,升序合并) 单链表的合并 单链表的合并情况有如下几种: (1)Length(L1)=Length(L2) (2)Length(L1)>Length(L2) (3)Length(L1)<Length(L2) 单链表的交叉合并 (交叉合并的重点在交叉,不保证合并后的数据是有序的) 代码如下: #include<stdio.h> #include<malloc.h> typedef struct LNode { int data; struct LNode *next; //指针 阅读详情

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

有递归和非递归两种方法;
注意非递归里面对头结点设置之后,节点要移动

/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode Merge(ListNode list1,ListNode list2) {
        /*
        递归的解法
        if(list1==null)
            return list2;
        if(list2==null)
            return list1;
        if(list1.val<list2.val){
            list1.next=Merge(list1.next,list2);
            return list1;
        }
        else{
            list2.next=Merge(list1,list2.next);
            return list2;
        }
        */
        //非递归解法

        if(list1==null)
            return list2;
        if(list2==null)
            return list1;
        ListNode p1=list1;
        ListNode p2=list2;
        ListNode temp=null;
        ListNode current=temp;
        while(p1!=null && p2!=null){
            if(p1.val<=p2.val){
                if(temp==null)
                    temp=current=p1;
                else{
                    current.next=p1;
                    current=current.next;
                    //p1=p1.next不能放在这里,会造成死循环
                }
                p1=p1.next;
            }
            else{
                if(temp==null)
                    temp=current=p2;
                else{
                    current.next=p2;
                    current=current.next;
                    //p2=p2.next不能放在这里,会造成死循环
                }
                p2=p2.next;
            }
        }
        if(p1==null)
            current.next=p2;
        else
            current.next=p1;
        return temp;

    }
}
玩转链表之链表合并 ** 时间复杂度:O(n),最坏情况遍历两个链表的所有节点, 空间复杂度:O(1)** 递归思想由小及大,是一个累计的过程,设定一种模式让其重复执行 ** 时间复杂度:O(n),最坏情况遍历两个链表的所有节点, 空间复杂度:O(n),递归栈长度最大为n** ** 时间复杂度:O(n),遍历两个链表的所有节点, 空间复杂度:O(n),容器占用两链表大小的空间** 时间复杂度:O(n*k),n为所有链表总节点数,最坏每次合并都为O(n),分治为二叉树型递归,每个节点都要使用一次合并,要合并k-1次 空间复杂度: 阅读详情

相关推荐

实现两个链表的合并(数据结构课程设计c语言版)

实现两个链表的合并(数据结构课程设计c语言版)

如何实现简单链表?如何合并两个链表?(C语言实现)

如何用C语言实现简单链表? 1.先起别名,提高后续代码的开发效率,增加代码的可读性 2.定义链表结点的结构体类型 3.定义对链表的主要操作方法 4.对链表进行测试操作 分布展示测试效果 测试代码总览

Kk_1025的博客 6842

区块链入门:用账本、乐高和三台旧电脑讲懂分布式账本

区块链是一种去中心化的分布式账本技术,其核心原理是通过密码学哈希、共识机制和链式结构实现数据不可篡改与多方共同验证。它不依赖单一中心,而是将交易记录同步复制到多个节点,依靠数学规则而非人工信任达成一致,从而在数字世界构建可验证的信用基础设施。这种‘集体见证’模式显著提升了系统抗单点故障与人为干预的能力,广泛应用于供应链溯源、数字身份、教育管理及公益透明等需强信任保障的场景。本文以账本类比、乐高拆解和Ganache实操为线索,面向零基础读者通俗解析哈希值、挖矿与智能合约等关键概念。

weixin_30517215的博客 274

将2个链表交替合并成一个链表

将带有头结点的2个

lotluck的专栏 4865

5分钟搞定:用Ollama在MacBook上本地运行Qwen3大模型(附避坑指南)

本文详细介绍了如何在MacBook上使用Ollama快速部署和运行Qwen3大模型,包括安装步骤、性能优化技巧及常见问题解决方案。Ollama作为一款轻量级工具,特别适合M系列芯片的Mac用户,支持多种量化版本,显著降低资源消耗,提升推理速度。

sql99的博客 822

大尺寸智能车的CAN驱动控制器制作(一)

本驱动板使用8个半H桥BTS7960驱动,使用CAN接口于车体主控制器通讯,最大承受电压48V 电流20A ,主控为STM32F103VET6,电机控制频率为18KHz,CAN通讯芯片为TJA1042T,全驱动板6-24V宽电压供电,采用24V降5V,5V降3.3V的方案供电,其中经过AMS1117作为降压芯片,可以有效降低主控损毁几率。在这里可以看到555电机相比于其他电机的功率大很多,所以需要大功率的电机驱动,在以往的电机驱动选型中选择了TB6612,L298N等小功率电机驱动。

技术的力量能够改变世界 569

经典算法——合并两个有序链表

题目描述 Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists. 完整测试程序: #inc

henryzhihua 3774

手把手教你搭建硬件在回路(HIL)仿真系统:从Simulink建模到实时测试

本文详细介绍了如何从零开始搭建硬件在回路(HIL)仿真系统,涵盖Simulink建模、实时仿真、代码生成及调试等关键步骤。通过具体配置示例和优化技巧,帮助开发者解决复杂控制系统验证中的技术难题,提升半实物仿真的效率和可靠性。

weixin_30952535的博客 445

链表的合并

1.两个升序链表合并为一个升序链表 利用原链表空间,将两个升序的链表合并成一个升序链表,时间复杂度O(N),空间复杂度O(1) 用两个指针p1,p2分别遍历L1和L2,用一个尾指针永远指向新链表的最后一个节点 比较两个指针指向的节点的大小,将数据域较小的节点用尾插法接在新链表后面 尾指针后移,p1或者p2后移 当有一个为空时另一个还会有剩余节点没有加入新链表,将剩下的直接接在新链表后面 算法实现c++: LinkList mergeTwoLink(LinkList L1,LinkList.

m0_51474171的博客 1万+

Obsidian的Git插件设置配置全流程 -- 简单的电脑端多平台同步方案及常见问题

Git同步obsidian的保姆级教程和常见问题

weixin_44370439的博客 1万+

【数据集处理】DroneVehicle数据集处理方法

DroneVehicle数据集由无人机采集的56,878张图像组成,其中一半是RGB图像,其余为红外图像。作者为这五个类别制作了带有定向边界框的丰富注释。

qq_44102942的博客 5046

两个链表的合并

将两个链表合并,是面试题中经常遇到的编程题,工作中也会少许用到,难度不大。 下文中是将一个A链表和B链表合并在新的C链表中。 #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; typedef struct node* List; struct node{ int data; List next; }; //合并两个链表到新的链表里面 Lis...

nick_chain的博客 3万+

SpringBoot+Flowable 6.8.0实战:5分钟搞定免登录流程图设计器

本文详细介绍了如何通过SpringBoot与Flowable 6.8.0深度整合,快速实现免登录流程图设计器的集成方案。通过排除默认安全配置、自定义安全策略和用户模拟服务,开发者可在5分钟内完成设计器的部署,适用于快速原型开发和企业内部工具搭建。

weixin_29204205的博客 280

合并链表

[1, 2, 4] [1, 3, 4] 合并之后为[1, 1, 2, 3, 4, 4] /* 节点类型 */ typedef struct node{ int val; struct node *next; }ListNode; /* 函数 */ ListNode *merge2Lists(ListNode *p1, ListNode *p2) { ListNode *p...

weixin_39618542的博客 184

关于“为爱发电”的一些说明~~

专栏教学资料+工程文件

数字IC/FPGA杂货铺,找一找,或许有你想要的~ 2675

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

合并 K 个升序链表

所指向的元素处于「待合并」的状态,也就是说它们还没有合并入最终的链表。以下是合并的步骤和注意事项,对这个问题比较熟悉的读者可以跳过这一部分。在解决「合并K个排序链表」这个问题之前,我们先来看一个更简单的问题:如何合并两个有序链表?请你将所有链表合并到一个升序链表中,返回合并后的链表。这个方法和前两种方法的思路有所不同,我们需要维护当前每个链表没有被合并的元素的最前面一个,属性不保存任何值),这是为了方便代码的书写,在整个链表合并完之后,返回它的下一位置即可。,我们的宗旨是「原地调整链表元素的。

程序猿进阶 856

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

合并两个有序的单链表,合并之后的链表依然有序

思路: 新建一个单链表,每次都把两个有序链表中的更小的值加入到新链表中 public class LinkedListConbine { public static void main(String[] args) { SingleLinkedList4 singleLinkedList1 = new SingleLinkedList4(); Singl...

ytc958374686的博客 2203

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

合并两个有序链表

接受两个链表的头节点作为参数。如果其中一个链表为空,直接返回另一个链表。如果两个链表都不为空,比较两个链表当前节点的值。将值较小的节点作为合并后链表的一部分,并递归地调用方法处理下一个节点。如果合并后的链表为空,输出 “[]” 表示空链表。如果合并后的链表不为空,遍历链表并输出链表中的值,用方括号和逗号分隔。通过遍历整数列表,创建链表节点,构建链表数据结构。新链表是通过拼接给定的两个链表的所有节点组成的。提示用户输入两个链表的数字表示,以空格分隔的数字序列。将两个升序链表合并为一个新的。

dknna的博客 1152

【链表】合并K个排序链表

问题描述 合并k个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 示例: 输入: [ 1->4->5, 1->3->4, 2->6 ] 输出: 1->1->2->3->4->4->5->6 class Solution { public ListNode mergeKL...

永生只是一场幻梦 2652

合并两个链表

合并两个链表 题目描述: 思路一:迭代 我们可以用迭代的方法来实现上述算法。当 l1 和 l2 都不是空链表时,判断 l1 和 l2 哪一个链表的头节点的值更小,将较小值的节点添加到结果里,当一个节点被添加到结果里之后,将对应链表中的节点向后移一位 首先,我们设定一个哨兵节点 prehead ,这可以在最后让我们比较容易地返回合并后的链表。我们维护一个 prev 指针,我们需要做的是调整它的 next 指针。然后,我们重复以下过程,直到 l1 或者 l2 指向了 null :如果 l1 当前节点的值小于

weixin_43831728的博客 3877
上一篇: 产品笔试概念总结
下一篇: 二叉树镜像
ListentTome
博客等级 码龄9年 3粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值