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

宏观角度认识递归之合并两个有序链表

21. 合并两个有序链表 - 力扣(LeetCode)

依旧是利用宏观角度来看待问题,其中最主要的就是要找到重复的子问题;

题目中要求把两个有序链表进行合并,同时不能够创建新的节点,并返回链表的起始点:因此可以思考它的解题过程,首先比较两个链表的首节点,提取出较小的一个,然后将剩下的两个链表继续进行合并,并对提取出的较小的那个进行返回;

1. 重复子问题 -> 函数头:总会有两个链表进行合并,因此要给出两个链表的头结点位置,并要有一个返回值;

2. 解析子问题 -> 函数体:两个链表的头结点进行比较,提取出较小的那个,继续调用链表合并方法,将较小的那个节点进行返回;

3. 递归出口:当两个链表中的某一个链表的指向结点为空的时候,说明这个链表已经遍历完了,就直接返回另一个链表的指向节点;

代码实现 

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode mergeTwoLists(ListNode list1, ListNode list2) {// 递归出口if(list1 == null) return list2;if(list2 == null) 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.lryc.cn/news/218631.html

相关文章:

  • Leetcode-509 斐波那契数列
  • 解密 docker 容器内 DNS 解析原理
  • 故障诊断模型 | Maltab实现SVM支持向量机的故障诊断
  • 开源的网站数据分析统计平台——Matomo
  • linux入门到地狱
  • 架构”4+1“视图
  • 『精』Vue 组件如何模块化抽离Props
  • JavaScript字符串字面量详细解析与代码实例
  • Android java Handler sendMessage使用Parcelable传递实例化对象,我这里传递Bitmap 图片数据
  • CTF工具PDF隐写神器wbStego4open安装和详细使用方法
  • docker镜像使用
  • 【Git】git的下载安装与使用
  • R语言中的函数27:polynom::polynomial(), deriv(),integral(),solve()多式处理函数
  • 基于STM32CubeMX和keil采用USART/UART实现非中断以及中断方式数据回环测试借助CH340以及XCOM
  • Spring cloud负载均衡 @LoadBalanced注解原理
  • C#when关键字
  • 华为政企无线局域网产品集
  • 解释 RESTful API
  • 青翼科技-国产化ARM系列TES720D-KIT
  • Tomcat为什么支持线程池?
  • Mac安装VMware
  • 项目部署文档
  • HTML+CSS阶段知识点梳理
  • 网易按照作者批量采集新闻资讯软件说明文档
  • SwiftUI 代码调试之都是“变心”惹的祸
  • u20.04安装slam库
  • 齐纳二极管,肖特基二极管,瞬态电压抑制二极管
  • axios 全局错误处理和请求取消
  • 无法加载文件 C:\Program Files\nodejs\cnpm.ps1,因为在此系统上禁止运行脚本。有
  • 学电脑编程零基础,计算机编程入门先学什么