合并两个链表

news2024/9/22 7:22:40

 

题目描述

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

比如以下例子:

 

题目接口:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
        
    }
};

题目解答:

1.迭代法(尾插法)

这个题目其实我之前做过。只不之前用的是迭代法来做的。迭代法的解题代码如下:

class Solution {
public:
    ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
        if(list1 == nullptr)
        {
            return list2;
        }

        if(list2 == nullptr)
        {
            return list1;
        }
         
         ListNode* head = nullptr;//指向头节点
         ListNode* tail = nullptr;//指向尾节点

        while(list1&&list2)
        {
            if(list1->val<list2->val)
            {
                if(head == nullptr)
                {
                    head = tail = list1;
                  
                }

                 else
                 {
                  tail->next = list1;
                  tail = tail->next;
                 }
                   list1 = list1->next;
                  tail->next = nullptr;
            }

            else
            {
                 if(head == nullptr)
                {
                    head = tail = list2;
                    
                }

                else{
                tail->next = list2;
                tail = tail->next;
                }
                list2 = list2->next;
                tail->next = nullptr;
            }

        }

        //若list1或者list2里边有未清空的便直接插入
        if(list1)
        {
            tail->next = list1;
        }

        if(list2)
        {
            tail->next = list2;
        }

        return head;
        
    }
};

看起来特别长是吧,是的没错。并且这里还有许多细节要注意。

1.tail表示的是链表的尾节点,所以在尾插了一个节点以后要向后移动来保证tail所在位置依旧是链表尾。

2.tail在插入一个节点以后要在list1或者list2找到下一个节点后置空。

有一说一,迭代法是真的麻烦。

2.递归写法

首先,依照递归法的使用步骤。首先就要先找到重复的子问题。其实非常简单。

1.重复的子问题就是找到两个链表中小的尾插。

2.递归的结束条件,当两个链表有一个空的时候便结束递归,返回不为空的链表。

3.函数体的写法,找到小的插入到链表中。首先便要找到两个链表中比较小的数,然后搞一个新的节点,这个节点的值便是这个小的值。

class Solution {
public:
    ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
      if(list1 == nullptr)
      {
          return list2;
      }

      if(list2 == nullptr)
      {
          return list1;
      }

      if(list1->val<list2->val)//确定头节点后一直找剩下的链表的值中较小的尾插
      {
          list1->next =  mergeTwoLists(list1->next,list2);
          return list1;
      }

      else
      {
          list2->next = mergeTwoLists(list1,list2->next);
          return list2;
      }

        
    }
};

递归的写法可比迭代的写法简单多了。不过,递归写法的代码不是那么好想出来的。得多多练习才行。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/931812.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

nodejs+vue+elementui农业产品信息网上商城管理系统_9927h

语言 node.js 框架&#xff1a;Express 前端:Vue.js 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;VScode 前端nodejsvueelementui,系统使用权限分别包括管理员、种植户和用户&#xff0c;其中管理员拥有着最大的权限&#xff0c;同时管理员的…

C++初学者学习指南

文章目录 环境职业选择基本技能新特性与学习曲线高阶技能C模版元编程线程池&#xff0c;异步任务 C 相关工具及资源C ToolsC Resources 项目大项目小项目 如何学未来期望 环境 编程工具&#xff1a;VSCode插件&#xff1a; BazelC/CClang-FormatVim 职业选择 AI领域&#xf…

大学英语赛道情报分析——全国大学生英语竞赛

竞赛简介 竞赛简介更多>全国大学生英语竞赛每年一届&#xff0c;自1999年创办以来至今已连续举办二十三届&#xff0c;得到了各省、自治区、直辖市大学外语教学研究会和各高校师生的大力支持&#xff0c;每年全国共有31个省&#xff08;自治区、直辖市&#xff09;的一千二百…

设计模式之工厂模式(万字长文)

文章目录 概述工厂模式的优点包括工厂模式有几种主要的变体看一个具体需求使用传统的方式来完成传统的方式的优缺点 简单工厂模式基本介绍使用简单工厂模式简单工厂模式的优缺点优点&#xff1a;缺点&#xff1a; 工厂方法模式看一个新的需求思路 1思路 2工厂方法模式介绍工厂方…

安达发|关于MES制造执行系统成功实施的经验分享

智能制造”热潮席卷神州大地&#xff0c;在国家的大力推进下&#xff0c;建设智能工厂&#xff0c;推进智能制造已成为制造企业共同的目标。作为承上启下的车间级综合信息系统&#xff0c;MES系统得到了制造企业的广泛关注&#xff0c;市场变得异常火热。 但是&#xff0c;MES系…

解决IndexError: index 0 is out of bounds for axis 1 with size 0

标题 引言问题背景解决思路如何防止总结参考资料 博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客&#x1f466;&#x1f3fb; 《java 面试题大全》 &#x1f369;惟余辈才疏学浅&#xff0c;临摹之作或有不妥之处&#xff0c;还请读者海涵指正。☕&#x1f36d;…

mysql 查询的字段值太长显示不全 group_concat

当前这个字段非常的长&#xff0c;在数据库看的时候也只是显示一部分内容&#xff0c;这是由于group_concat的group_concat_max_len参数的值太小造成的&#xff0c;默认值如下&#xff1a; show VARIABLES like group_concat_max_len 我们需要将这个值调大一点就可以解决上面这…

如何搭建智能家居系统并通过内网穿透实现远程控制家中设备

文章目录 前言1. 安装Home Assistant2. 配置Home Assistant3. 安装cpolar内网穿透3.1 windows系统3.2 Linux系统3.3 macOS系统 4. 映射Home Assistant端口5. 公网访问Home Assistant6. 固定公网地址6.1 保留一个固定二级子域名6.2 配置固定二级子域名 前言 Home Assistant&…

(纯c)数据结构之------>链表(详解)

目录 一. 链表的定义 1.链表的结构. 2.为啥要存在链表及链表的优势. 二. 无头单向链表的常用接口 1.头插\尾插 2.头删\尾删 3.销毁链表/打印链表 4.在pos位置后插入一个值 5.消除pos位置后的值 6.查找链表中的值并且返回它的地址 7.创建一个动态开辟的结点 三.顺序表与链表…

VAE原理 代码详解 pin_memory

VAE代码 import torch from torch import nn import torch.nn.functional as F class VAE(nn.Module):def __init__(self, input_dim784, h_dim400, z_dim20): # 28x28784,20可能是这个手写体一共有20类&#xff1f;super(VAE, self).__init__()self.input_dim input_dimsel…

【Hadoop】HDFS读写流程和客户端命令使用

&#x1f341; 博主 "开着拖拉机回家"带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——&#x1f390;开着拖拉机回家_Linux,Java基础学习,大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341; 希望本文能够给您带来一定的…

XSS攻击与防御

目录 一、环境配置 kali安装beef contos7安装dvwa 二、XSS攻击简介 三、XSS攻击的危害 四、xSS攻击的分类 五、XSS产生的原因 六、构造XSS攻击脚本 (一)基础知识 常用的html标签 常用的js脚本 (二)构造脚本的方式弹窗警告 七、自动XSS攻击 (一)BeEF简介 (二)BeEF…

Python 阿里云盾滑块验证

&#xfeff;<table><tr><td bgcolororange>本文仅供学习交流使用&#xff0c;如侵立删&#xff01;</td></tr></table> 记一次阿里云盾滑块验证分析并通过 操作环境 win10 、 macPython3.9selenium、pyautogui 分析 最近在做中国庭审…

SQLI-labs-第一关

知识点&#xff1a;单引号字符型注入 思路&#xff1a; 1、根据提示&#xff0c;为get注入&#xff0c;在url中输入内容 2、判断注入点 输入?id1&#xff0c;显示数据库语句错误&#xff0c;说明这里存在sql注入漏洞 输入?id1‘ and 11 -- &#xff0c;回显正常&#xff0c…

安科瑞AMB300系列母线槽红外测温解决方案监测母线槽连接处温度-安科瑞黄安南

一、行业背景 随着当今社会的发展和用电量的急剧上升&#xff0c;现代化工程设施和装备的涌现&#xff0c;封闭式母线即母线槽因方便、节能、载流量大、机械强度高 、安装灵活、寿命长等特点&#xff0c;逐渐取代传统电缆&#xff0c;广泛应用于室内变压站、高层建筑和大型厂房…

Lumion软件安装包分享(附安装教程)

目录 一、软件简介 二、软件下载 一、软件简介 Lumion是一款由Lumion公司开发的实时3D渲染和动画制作软件&#xff0c;广泛应用于建筑、规划和设计领域。它以快速、高效和逼真的渲染效果而闻名&#xff0c;帮助用户创建出色的建筑可视化作品。 1、Lumion的主要特点 实时渲染…

导数基本概念

定义 f ( x ) − f ( a ) x − a {f(x) - f(a)\over x -a} x−af(x)−f(a)​ 表示 f(x) 函数从 x 到 a 的平均变化率&#xff0c;如果使 x 趋近于 a&#xff0c;则表示函数在 a 点的变化率。 若有以下极限存在&#xff08;定义域不包含a&#xff09;&#xff1a; lim ⁡ x →…

strstr函数

目录 函数介绍&#xff1a; 函数分析&#xff1a; ​使用案例&#xff1a; 函数介绍&#xff1a; 返回指向 str1 中第一次出现的 str2 的指针&#xff0c;如果 str2 不是 str1 的一部分&#xff0c;则返回一个空指针。 匹配过程不包括终止空字符&#xff0c;但它到此为止。 …

系统架构设计高级技能 · 安全架构设计理论与实践

系列文章目录 系统架构设计高级技能 软件架构概念、架构风格、ABSD、架构复用、DSSA&#xff08;一&#xff09;【系统架构设计师】 系统架构设计高级技能 系统质量属性与架构评估&#xff08;二&#xff09;【系统架构设计师】 系统架构设计高级技能 软件可靠性分析与设计…

小研究 - JVM 逃逸技术与 JRE 漏洞挖掘研究(六)

Java语言是最为流行的面向对象编程语言之一&#xff0c; Java运行时环境&#xff08;JRE&#xff09;拥有着非常大的用户群&#xff0c;其安全问题十分重要。近年来&#xff0c;由JRE漏洞引发的JVM逃逸攻击事件不断增多&#xff0c;对个人计算机安全造成了极大的威胁。研究JRE安…