LC-链表的中间节点(递归)

news2025/1/19 14:23:20

LC-链表的中间节点(递归)

链接:https://leetcode.cn/problems/middle-of-the-linked-list/description/
描述:给你单链表的头结点 head ,请你找出并返回链表的中间结点。

如果有两个中间结点,则返回第二个中间结点。

例1:
在这里插入图片描述

输入:head = [1,2,3,4,5]
输出:[3,4,5]
解释:链表只有一个中间结点,值为 3 。

例2:
在这里插入图片描述

输入:head = [1,2,3,4,5,6]
输出:[4,5,6]
解释:该链表有两个中间结点,值分别为 3 和 4 ,返回第二个结点。

思路:可以利用递归去遍历每个节点,这样可以获取链表的总长度。在递归完返回的时候就可以判断节点是不是中间节点。首先我们需要定义两个成员变量:

	//记录链表长度
	int index = 0;
	//记录中间的节点
    ListNode result = null;

代码如下:

	public ListNode middleNode(ListNode head) {
		//当链表为空或者只有一个节点时返回head就行
        if (head == null || head.next == null) {
            return head;
        } else {
            return middle(head);
        }
    }

    public ListNode middle(ListNode head) {
    	//记录节点的下标
        int nodeIndex = index;
        if (head != null) {
            head = head.next;
            //下标自增
            index++;
            middle(head);
            //递归返回时判断是否为中间节点
            if ((index / 2 - 1) == nodeIndex) {
                result = head;
            }
        }
        return result;
    }

我们判断是不是中间节点的时候是

(index / 2 - 1) == nodeIndex)

下面解释一下,首先我们需要知道每个节点对应的下标,以例1为例:

节点:1		2		3		4		5		null	
下标:		0		1		2		3		4

可以看见第一个节点没有参与,因为我们(head = head.next)跳过了第一个节点,是最后null为最后一个节点,所以我们把index/2后需要将下标向前移动一位。

注意:index需要定义成成员变量才能统计长度
nodeIndex必须定义为局部变量,这样才能跟随节点,如果我们定义在方法里,跟index一样去增加,那递归返回时会发现每个节点下标都一样。
缺点:此方法占用内存较多

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

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

相关文章

Kali Linux是什么?它的主要用途是什么?

1. Kali Linux是什么? Kali Linux是一款基于Debian Linux的发行版,专注于网络安全和渗透测试。它由全球顶尖的安全专家和黑客社区维护开发,提供了丰富的工具和资源,用于测试网络、系统和应用程序的安全性。Kali Linux以其强大的功…

SpringCloud教程(中)

目录 八、Hystrix(服务降级) 8.1、Hystrix基本概念 8.1.1、分布式系统面临的问题 8.1.2、Hystrix是什么? 8.1.3、服务降级 概念 哪些情况会触发降级 8.1.4、服务熔断 8.1.5、服务限流 8.2、Hystrix案例 8.2.1、Hystrix支付微服务构…

关于vue3+niginx前端部署问题

曾经有人给我讲,所谓个人技术是死磕出来的,只有经过不断的试错和解决过程所有问题,以及不断变换思路去解决一件问题的过程,就是个人技术的成长。 最近在给自己搭建的小服务加一个bolg模块,在网上大概看了下轻量级的框…

发明专利写作模板和指导以及案例分析

文章目录 权利要求书说明书摘要摘要附图说明书技术领域背景技术发明内容附图说明具体实施方式 说明书附图 权利要求书 写作模板 1. 一种xxx方法,其特征在于,包括如下步骤:S1, (概况介绍第一步);S2, &#x…

“深入了解Spring框架:IOC、注入方式和与Web容器的整合“

目录 1. Spring框架简介2. Spring的IOC(控制反转)3. Spring的注入方式3.1 第一种:构造函数注入3.2 第二种:Setter方法注入3.3 第三种:注解注入按名称注入(byname):按类型注入&#x…

算法通关村第九关 | 二叉树查找和搜索树原理

1. 二分查找的扩展问题 1.1山脉数组的巅峰索引 LeetCode852:题目核心意思是在数组中,从0到i是递增的,从i1到数组最后是递减的,让你找到这个最高点。 三种情况: mid在上升阶段的时候,满足arr[mid] > a…

Docker容器与虚拟化技术:Docker容器操作、网络模式

目录 一、理论 1.Docker 容器操作 2.Docker 网络 二、实验 1.Docker 容器操作 2.Docker 网络 2.Docker 的网络模式 三、问题 1. 批量删除所有容器未生效 2.使用bridge模式指定IP运行docker报错 3.未显示bridge网络模式名称 四、总结 一、理论 1.Docker 容器操作 &a…

TVP助力数智化转型:数字物业与产业园区智慧化高质量发展

引言 数字化技术的蓬勃发展,为传统行业转型提供了前所未有的机遇。相较于早期的基础数字化,现如今数字化转型已逐步踏入更深层次。在各个领域,将数字技术与实际应用有机融合已日益显得迫切。如何在这一浪潮中巧妙融合数字技术与传统行业&…

cesium加载wms服务

成果图 源码 cesium加载不用像其他api一样加那么多参数,最终请求路径上发现他也是把那些参数都加上了,应该是有默认的参数吧 var wmsLayer new Cesium.WebMapServiceImageryProvider({url: http://你的地址/pjgeoserver/services/wms,layers: services…

Golang协程,通道详解

进程、线程以及并行、并发 关于进程和线程 进程(Process)就是程序在操作系统中的一次执行过程,是系统进行资源分配和调度的基本单位,进程是一个动态概念,是程序在执行过程中分配和管理资源的基本单位,每一…

leetcode611. 有效三角形的个数(java)

有效三角形的个数 有效三角形的个数排序加二分排序 双指针 上期算法 有效三角形的个数 给定一个包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。 示例 1: 输入: nums [2,2,3,4] 输出: 3 解释:有效的组合是: 2,3,4 (使用第一个 2) 2,3,4 (使…

python进阶做题日记365-1,

第一天: 1:题目名称:代写匿名信时间限制:1000ms内存限制:256M 题目描述小Q想要匿名举报XX领导不务正业! 小Q害怕别人认出他的字迹。 他选择从报纸上剪裁下来英文字母组成自己的举报信。 现在小Q找来了报纸…

【分布式存储】数据存储和检索~倒排索引pageRank

为什么需要倒排索引 通过前两篇的文章介绍,B树主要针对的是读多写少的场景,而LSM针对的是写多读少的场景,其实在日常开发中,我们会将数据存储到搜索引擎中,然后进行数据的搜索,这种场景其实针对的是快速根…

AI幕后的关键技术之一——HBM

半导体产业步入下行周期之际,2023年ChatGPT的“走红”为产业带来新的发展方向:AI人工智能。 ChatGPT正掀起一场声势浩大的AI浪潮,AI时代下,为满足海量数据存储以及日益增长的繁重计算要求,半导体存储器领域也迎来新的变…

shell第九章iptables防火墙

防火墙:隔离功能 部署点:部署在网络边缘,或者主机边缘,在工作中,防火墙的主要作用,决定那些数据可以被外网访问,以及哪些数据可以进入内网访问 讨论防火墙,主要就是在网络层进行讨…

无涯教程-Perl - setsockopt函数

描述 此函数将SocketoptionsOPTNAME的值设置为SOCKET上指定级别的OPTVAL值。您需要导入Socket模块,以获取Tabl中显示的OPTNAME的有效值 语法 以下是此函数的简单语法- setsockopt SOCKET, LEVEL, OPTNAME, OPTVAL返回值 如果失败,此函数返回undef;如果成功,则返…

java.lang.NoClassDefFoundError: org/apache/tez/dag/api/TezConfiguration

错误: java.lang.NoClassDefFoundError: org/apache/tez/dag/api/TezConfigurationat org.apache.hadoop.hive.ql.exec.tez.TezSessionPoolSession$AbstractTriggerValidator.startTriggerValidator(TezSessionPoolSession.java:74)at org.apache.hadoop.hive.ql.e…

数据集成革新:去中心化微服务集群的无限潜能

在当今数据密集型的业务环境下,传统的集中式架构已经难以满足高可用性和高并发性的要求。而去中心化微服务集群则通过分散式的架构,将系统划分为多个小型的、独立部署的微服务单元,每个微服务负责特定的业务功能,实现了系统的高度…

bytesec靶场

靶场下载 https://www.vulnhub.com/entry/hacknos-os-bytesec,393/ 下载完成后进入配置修改网卡 教程 配置 第一步:启动靶机时按下 shift 键, 进入以下界面 第二步:选择第二个选项,然后按下 e 键,进入编辑界面 将…