链表的中间结点——每日一题

题目链接:

OJ链接




 

题目:

给你单链表的头结点 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 ,返回第二个结点。

提示:

  • 链表的结点数范围是 [1, 100]
  • 1 <= Node.val <= 100

理解分享:

我采用了快慢指针的方法来实现。

首先,我们定义了两个指针 n1n2,它们都初始化为指向链表的头节点 head

然后,我们进入一个循环,条件是 n2 不为空且 n2 的下一个节点也不为空。在循环的每一次迭代中,n1 指针每次移动一步,而 n2 指针每次移动两步。这样做的效果是,当 n2 指针到达链表的末尾时,n1 指针恰好处于链表的中间位置。

最后,我们返回 n1 指针所指向的节点,即链表的中间节点。

这种方法的关键在于,通过使用两个指针,一个指针移动速度为另一个指针的两倍,当快指针到达链表尾部时,慢指针正好处于链表的中间位置,从而实现了在一次遍历中找到链表的中间节点。这种算法的时间复杂度是 O(n),其中 n 是链表的长度。

代码:

typedef struct ListNode ll;

// 找到链表的中间节点
struct ListNode* middleNode(struct ListNode* head) {
    // 定义两个指针,初始都指向头节点
    ll* n1 = head;  // 慢指针
    ll* n2 = head;  // 快指针
    
    // 当快指针不为空且快指针的下一个节点也不为空时,继续循环
    while (n2 && n2->next) {
        // 慢指针每次向后移动一步
        n1 = n1->next;
        // 快指针每次向后移动两步
        n2 = n2->next->next;
    }
    
    // 当快指针到达链表末尾时,慢指针指向的节点即为链表的中间节点
    return n1;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【二分查找】Leetcode 点名

题目解析 LCR 173. 点名 算法讲解 1. 哈希表 class Solution { public:int takeAttendance(vector<int>& nums) {map<int, int> Hash;for(auto n : nums) Hash[n];for(int i 0; i < nums[nums.size() - 1]; i){if(Hash[i] 0)return i;}return nums.si…

Java设计模式—组合模式(Composite Pattern)

组合模式&#xff08;Composite&#xff09;&#xff0c;将对象组合成树形结构以表示部分-整体的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 public class CompositeTest {public static void main(String[] args){// 创建主菜单MenuComponent mainMen…

【Unity添加远程桌面】使用Unity账号远程控制N台电脑

设置地址&#xff1a; URDP终极远程桌面&#xff1b;功能强大&#xff0c;足以让开发人员、设计师、建筑师、工程师等等随时随地完成工作或协助别人https://cloud-desktop.u3dcloud.cn/在网站登录自己的Unity 账号上去 下载安装被控端安装 保持登录 3.代码添加当前主机 "…

【环境搭建】ubuntu工作站搭建全流程(显卡4090)

安装ubuntu22.04系统 首先&#xff0c;先压缩windows分区&#xff0c;按住Win X快捷键&#xff0c;选择磁盘管理,压缩分区&#xff0c;压缩出新的分区用于安装ubuntu22.04 windows插入系统盘&#xff0c;点击重启&#xff0c;一直按F12,选择系统盘启动方式语言选择chinese–…

超详细的YOLOv8项目组成解析:一站式指南了解其架构与组件

目录 yolov8导航 YOLOv8&#xff08;附带各种任务详细说明链接&#xff09; 项目结构 1. .github 2. docker 2.1 docker/Dockerfile 2.2 docker/Dockerfile-arm64 2.3 docker/Dockerfile-conda 2.4 docker/Dockerfile-cpu 2.5 docker/Dockerfile-jetson 2.6 docker/D…

虚拟机网络配置

1. 为什么要配置&#xff1f; 当我们创建好一个虚拟机并在网络方面未作更改由虚拟机自动生成ip地址时&#xff0c;虚拟机的ip地址是处于动态变化的&#xff0c;每次开启都会再随机生成一个新的ip&#xff1b;这不利于我们通过其他设备远程连接该虚拟机&#xff0c;这时候需要我…

SpringBoot学习之Kibana下载安装和启动(Mac版)(三十二)

一、简介 Kibana是一个开源的分析与可视化平台,设计出来用于和Elasticsearch一起使用的。你可以用kibana搜索、查看存放在Elasticsearch中的数据。Kibana与Elasticsearch的交互方式是各种不同的图表、表格、地图等,直观的展示数据,从而达到高级的数据分析与可视化的目的。 …

JVM_垃圾收集器

GC垃圾收集器 文章目录 GC垃圾收集器GC垃圾回收算法和垃圾收集器关系GC算法主要有以下几种四种主要的垃圾收集器SerialParallelCMSG1垃圾收集器总结查看默认垃圾收集器 默认垃圾收集器有哪些各垃圾收集器的使用范围部分参数说明 新生代下的垃圾收集器并行GC(ParNew)并行回收GC&…

Java-StringBuilder容器

一、基础用法 1.创建对象 StringBuilder sbnew StringBuilder(); 2.添加元素 可以添加整型、浮点型、字符串等。 sb.append(1); sb.append(2.3); sb.append(true); 3.反转 sb.reverse(); 4.获取长度 int len sb.length(); 5.转变成字符串 tring strsb.toString(); …

MySQL高级(索引语法、创建索引、查看索引、删除索引)

创建索引 create [unique | fulltext] index index_name on table_name (index_col_name,...); 查看索引 show index from table_name; 删除索引 drop index index_name on table_name; 案例演示&#xff1a; 先来创建一张表 tb_user&#xff0c;并且查询测试数据。 cre…

Win10系统下的EDGE浏览器启用IE模式

Win10系统下的EDGE浏览器目前已弃用IE内核&#xff0c;这样在访问某些较老的网站会有兼容性问题&#xff0c;本文记录了在EDGE浏览器中启用IE模式的操作方法。 一、启用EDGE浏览器的IE模式 要打开Internet Explorer模式&#xff0c;执行以下步骤: 1、在Microsoft Edge的地址栏…

JAVA集合(容器)

JAVA集合&#xff08;容器&#xff09;概念&#xff1a; 当我们需要存储一组一样&#xff08;数据类型相同&#xff09;的数据时需要用容器进行存储&#xff0c;数组就是这样一种容器&#xff0c;但是数组长度一经定义就不能再改变。 在实际开发中我们需要用到可以动态增长的…

【操作系统】CentOS7入门级安装

下载镜像 CentOS镜像下载Download (centos.org) 我们选择第一个 X86_64 CentOS Mirrors List 版本描述X86_X64带64位的32位扩展版(一般安装这个)ARM64 (aarch64)嵌入式。适用于微端(树莓派、机械臂、机械中控)IBM Power (ppc64le)专用于IBM POWER服务器 选择一个合适的链接 …

2024年32款数据分析工具分五大类总览

数据分析工具在现代商业和科学中扮演着不可或缺的角色&#xff0c;为组织和个人提供了深入洞察和明智决策的能力。这些工具不仅能够处理大规模的数据集&#xff0c;还能通过强大的分析和可视化功能揭示隐藏在数据背后的模式和趋势。数据分析工具软件主要可以划分为以下五个类别…

虚拟机VMware的下载、注册码(Mac与Windows)

1. 虚拟机的下载 windows 版的虚拟机叫 VMware Workstation mac版的虚拟机叫 VMware Fusion 官网下载地址: window 下载地址 https://www.vmware.com/content/vmware/vmware-published-sites/us/products/workstation-pro.html mac 下载地址 https://www.vmware.com/prod…

纯小白蓝桥杯备赛笔记--DAY10(字符串)

文章目录 KMP字符串哈希算法简介&#xff1a;斤斤计较的小z--2047字符串hash Manacher回文串的性质算法简介最长回文子串 字典树基础朴素字符串查找步骤前缀判定--1204 01tire算法简介&#xff1a;例题1&#xff1a;例题2&#xff1a; KMP字符串哈希 算法简介&#xff1a; 真前…

Supervision:机器视觉的技术平权

Roboflow Supervision是面向非机器视觉专家的可重复使用的计算机视觉工具。 无论你是需要从硬盘加载数据集、在图像或视频上绘制检测&#xff0c;或者计算一个区域中有多少检测目标&#xff0c;都可以依靠Supervison&#xff01; NSDT工具推荐&#xff1a; Three.js AI纹理开发…

Lambda 表达式简单演化(原始的方法调用,一步步简化成 lambda 表达式的过程)

目录 Lambda 表达式简单演化原始的方法调用&#xff0c;一步步简化成 lambda 表达式的过程原始接口方法没有参数的演示—示例 1具体代码 原始接口方法携带参数的演示—示例 2具体方法 Lambda 表达式简单演化 函数式接口的定义&#xff1a; 1、任何接口&#xff0c;如果只包含唯…

Springboot 测试模块 + 注入bean失败

1.添加依赖 <dependencies><!-- ... 其他依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency> </depende…

Chatgpt掘金之旅—有爱AI商业实战篇|在线辅导业务|(十一)

演示站点&#xff1a; https://ai.uaai.cn 对话模块 官方论坛&#xff1a; www.jingyuai.com 京娱AI 一、AI技术创业在线辅导业务有哪些机会&#xff1f; 人工智能&#xff08;AI&#xff09;技术作为当今科技创新的前沿领域&#xff0c;为创业者提供了广阔的机会和挑战。随着…