当前位置: 首页 > article >正文

算法与数据结构(合并有序链表)

思路:

本题可以用迭代或递归两种方法来解题:

本次的方法为递归,通过不断来移动链表中元素的位置实现递归

解题过程:

L1: 1   2   4

L2: 1   3   4

首先判断两个链表都不为空,所以前两个条件不符合

接着判断list1->val以及list2->val的大小

(1)若list1->val < list2->val

则说明L1应该在L2的前面,所以进行递归

(2)如果list1->val >= list2->val,则执行以下操作

递归的详细步骤:

第一步:首先比较list1的1和list2的1

执行(2)

返回了list2,直接确定了文件的头,因为确定了文件的头为list2的第一个数字,则list2的数字向后移一个单位

返回的链表:1

第二步:比较list1的1和list2的3

执行(1)

返回了list1,则上一个list2->next = list1

返回的链表: 1->1

第三步:比较list1的2和list2的3

执行(1)

返回了list1,则上一个list1->next = list1

返回的链表: 1->1->2

第四步:比较list1的4和list2的3

执行(2)

返回了list2,则上一个list1->next = list2

返回的链表: 1->1->2->3

第五步:比较list1的4和list2的4

执行(2)

返回了list2,则上一个list2->next = list2

返回的链表: 1->1->2->3->4

第六步:检测到list2为空

则直接返回list1

则上一个list2->next = list1

返回的链表: 1->1->2->3->4->4

代码:

class Solution {
public:
    ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) 
    {
        if(!list1)
        return list2;
        else if(!list2)
        {
            return list1;
        }    
        else if(list1->val < list2->val)
        {
            list1->next = mergeTwoLists(list1->next, list2); 
            return list1;
        }
        else
        {
            list2->next = mergeTwoLists(list1, list2->next); 
            return list2;
        }
    }
};


http://www.kler.cn/a/532914.html

相关文章:

  • 2. 【.NET Aspire 从入门到实战】--理论入门与环境搭建--.NET Aspire 概览
  • 系统URL整合系列视频一(需求方案)
  • 2021版小程序开发5——小程序项目开发实践(1)
  • 如何利用DeepSeek打造医疗领域专属AI助手?从微调到部署全流程解析
  • MySQL锁详解
  • sysbench压力测试工具mysql以及postgresql
  • Vue.js 如何选择合适的组件库
  • Spring PropertyPlaceholderConfigurer多配置问题
  • Verilog基础(三):过程
  • INA226的初次使用
  • Java基础学习笔记-标识符、变量、常量、关键字
  • 【C++】Lambda表达式
  • Linux 文件和目录
  • 图像增广:用OpenCV实现的6个自动图像增强策略
  • 【数据分析】豆瓣电影Top250的数据分析与Web网页可视化(numpy+pandas+matplotlib+flask)
  • UE求职Demo开发日志#19 给物品找图标,实现装备增加属性,背包栏UI显示装备
  • ip属地是根据所在位置定位的吗
  • C#中的委托(Delegate)
  • Redis-BitMap实现签到功能
  • 2024美团春招硬件开发笔试真题及答案解析
  • JVM 四虚拟机栈
  • 暴力破解与验证码安全
  • LabVIEW涡轮诊断系统
  • 【深度学习】多层感知机的简洁实现
  • 渗透测试之文件包含漏洞 超详细的文件包含漏洞文章
  • 3、参数化测试