【链表OJ 3】链表的中间结点

news2024/12/24 9:31:29

前言: 

        本文收录于http://t.csdn.cn/n6UEP数据结构刷题的博客中,首先欢迎大家的来访,其次如有错误,非常欢迎大家的指正!我会及时更正错误!

目录

一.链表的中间结点 

1.1原理:快慢指针的使用

链表元素个数为奇数时

链表元素个数为偶数时

1.2循环条件问题?


一.链表的中间结点 

来源:876. 链表的中间结点 - 力扣(LeetCode)

题目:

1.1原理:快慢指针的使用

这个算法之所以有效,是因为fast指针的移动速度是slow指针的两倍。

快慢指针的精妙之处在于,当快指针移动到链表尾部时,慢指针就刚好移动了链表长度的一半,从而找到中间节点。因此当,fast指针到达链表尾部时,slow指针将正好指向链表的中间节点。无论链表长度奇偶,这个方法都可以在一次遍历正确找到中间节点。

时间复杂度:O(n),因为只遍历链表一次。
空间复杂度:O(1),因为没有使用额外的空间。

整体思路:

  1. 函数以指向链表头部的指针作为参数。

  2. 初始化两个指针 slow  fast,它们都指向链表的头部。

  3. 进入一个循环,只要fast不为NULL且fast->next不为NULL,循环会继续执行。这个循环用于通过链表前进指针。

  4. 每次循环迭代中,slow 指针向前移动一步,通过赋值slow = slow-> next

  5. fast指针向前移动两步,通过赋值fast = fast -> next -> next

  6. 当循环结束时,slow 指针将指向链表的中间节点。这是因为fast指针的移动速度是slow指针的两倍,当 fast指针到达链表尾部时,slow指针刚好在链表的中间。

  7. 最后,函数返回slow指针,即链表的中间节点。

链表元素个数为奇数

动图演示:

链表元素个数为偶数

返回第二个中间结点的原因是题目要求:

 动图演示:

1.2循环条件问题?

循环条件不能调换顺序:

while 循环条件 fast && fast->next 不能写成 fast->next && fast 的目的是为了确保在遍历链表时不会出现空指针异常

如果将循环条件调换为fast->next&& fast ,在链表长度为奇数时,当快指针 fast指向最后一个节点时,fast->next仍然不为NULL,但此时fast已经为NULL,这样会导致在访问fastnext指针时出现错误。

通过保持条件为fast && fast->next ,可以确保在fast 和 fast->next 每次迭代中,快指针都不为NULL,从而避免了空指针的访问错误。这是正确处理快慢指针遍历的关键。

因此,为了保证代码的正确性,应该保持原始代码中的循环条件不变,即fast && fast->next

代码实现

struct ListNode* middleNode(struct ListNode* head){
      struct ListNode* slow=head,*fast=head;
      while(fast && fast->next)
      {
            slow=slow->next;
            fast=fast->next->next;
       }
       return slow;
}

代码执行:

        本文到此结束,如有错误欢迎大家指正,感谢来访!

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

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

相关文章

只会用插件可不行,这些前端动画技术同样值得收藏-JavaScript篇(下)

目录 前言 介绍 基本使用 关键帧 KeyframeEffect的三种类的声明 keyframes options 动画对象 全局Animation类 标签中的animate函数 总结 相关代码: 前言 接着上文往下介绍,上篇文章我们对JS原生动画和贝塞尔曲线有了一个详细的认识&#x…

了解IL汇编异常处理语法

从网上拷过来一个IL汇编程序,编译时先报如下错, 看它是把空格识别为了下注红线的字符,这是字符编码的问题,用记事本替换功能替换了; 然后又报如下的错, 看不出来问题,拷一句正确的来&#xff0…

Netty面试题3

讲一讲你在网络通讯中遇到的坑或者比较棘手的问题 1、网络延迟问题 2、网络拥塞问题 某公司的Java项目需要向远程服务器发送大量的HTTP请求并获取响应,由于请求量较大,导致网络拥塞,请求响应延迟较高。针对这个问题,我们可以采取…

「2024」预备研究生mem-等差等比数列片段和 一般数列

一、等差数列 片段和 二、等比数列 片段和 三、一般数列

数据结构 | 树的定义及实现

目录 一、树的术语及定义 二、树的实现 2.1 列表之列表 2.2 节点与引用 一、树的术语及定义 节点: 节点是树的基础部分。它可以有自己的名字,我们称作“键”。节点也可以带有附加信息,我们称作“有效载荷”。有效载荷信息对于很多树算法…

AcWing 379. 捉迷藏(最小路径点覆盖匈牙利算法)

输入样例&#xff1a; 7 5 1 2 3 2 2 4 4 5 4 6输出样例&#xff1a; 3 #include<bits/stdc.h> using namespace std; typedef long long ll; const int N220; int n,m,t; int d[N][N],vis[N]; int match[N]; bool find(int x){for(int i1;i<n;i){if(d[x][i]&&…

Mac unsupported architecture

&#xff08;瓜是长大在营养肥料里的最甜&#xff0c;天才是长在恶性土壤中的最好。——培根&#xff09; unsupported architecture 在mac的m系列芯片中容易出现此类问题&#xff0c;因为m系列是arm64的芯片架构&#xff0c;而有些nodejs版本或npm包的芯片架构是x86的&#x…

Visual Studio配置PCL库

Visual Studio配置PCL库 Debug和Release配置新建项目配置属性表测试参考 Debug和Release Debug和Release的配置过程一模一样&#xff0c;唯一区别就在于最后一步插入的附加依赖项不同&#xff0c;因此下面以debug为例。 配置新建项目 1、新建一个C空项目&#xff0c;模式设置…

Linux ——实操篇

Linux ——实操篇 前言vi 和 vim 的基本介绍vi和vim常用的三种模式正常模式插入模式命令行模式 vi和vim基本使用各种模式的相互切换vi和vim快捷键关机&重启命令基本介绍注意细节 用户登录和注销基本介绍使用细节 用户管理基本介绍添加用户基本语法应用案例细节说明 指定/修…

ROS实现机器人移动

开源项目 使用是github上六合机器人工坊的项目。 https://github.com/6-robot/wpr_simulation.git 机器人运动模型 运动模型如下所示&#xff1a;&#x1f447; 机器人运动的消息包&#xff1a; 实现思路&#xff1a;&#x1f447;   为什么要使用/cmd_vel话题。因为这…

Spring Cloud +UniApp 智慧工地云平台源码,智能监控和AI分析系统,危大工程管理、视频监控管理、项目人员管理、绿色施工管理

一套智慧工地云平台源码&#xff0c;PC管理端APP端平板端可视化数据大屏端源码 智慧工地可视化系统利用物联网、人工智能、云计算、大数据、移动互联网等新一代信息技术&#xff0c;通过工地中台、三维建模服务、视频AI分析服务等技术支撑&#xff0c;实现智慧工地高精度动态仿…

项目实战 — 消息队列(4){消息持久化}

目录 一、消息存储格式设计 &#x1f345; 1、queue_data.txt&#xff1a;保存消息的内容 &#x1f345; 2、queue_stat.txt&#xff1a;保存消息的统计信息 二、消息序列化 三、自定义异常类 四、创建MessageFileManger类 &#x1f345; 1、约定消息文件所在的目录和文件名…

重锤式表面电阻测试仪的原理和特点

重锤式表面电阻测试仪是一种用于测量材料表面电阻的仪器。它采用了重锤敲击和测量电流的方式进行测试。 工作原理&#xff1a; 重锤式表面电阻测试仪通过将一个金属锤头敲击在待测物体表面&#xff0c;产生一个封闭电路。测量仪器通过检测在敲击区域上下电极之间距离的电流流…

C语言代码的x86-64汇编指令分析过程记录

先通过Xcode创建一个terminal APP&#xff0c;语言选择C。代码如下&#xff1a; #include <stdio.h>int main(int argc, const char * argv[]) {int a[7]{1,2,3,4,5,6,7};int *ptr (int*)(&a1);printf("%d\n",*(ptr));return 0; } 在return 0处打上断点&…

相机传感器格式与镜头光圈参数

相机靶面大小 CCD/CMOS图像传感器尺寸&#xff08;sensor format&#xff09;1/2’‘、1/3’‘、1/4’实际是多大 1英寸——靶面尺寸为宽12.7mm*高9.6mm&#xff0c;对角线16mm。 2/3英寸——靶面尺寸为宽8.8mm*高6.6mm&#xff0c;对角线11mm。 1/2英寸——靶面尺寸为宽6.…

第4章 变量、作用域与内存

引言 由于js是一门只有在声明变量后才能明确类型的语言&#xff0c;并且在任意时刻都可以改变数据类型。这也引起了一些问题 原始值与引用值 原始值就是基本数据类型&#xff0c;引言值就是复杂数据类型 变量在赋值的时候。js会判断如果是原始值&#xff0c;访问时就是按值访问…

Air32 | 合宙Air001单片机内部FLASH读写示例

Air32 | 合宙Air001单片机内部FLASH读写示例 代码已经通过测试&#xff0c;开发环境KEIL-MDK 5.36。 测试代码 void FLASH_RdWrTest(void) {uint32_t Address;uint32_t PageReadBuffer[FLASH_PAGE_SIZE >> 2];uint32_t PageWriteBuffer[FLASH_PAGE_SIZE >> 2];mem…

仓储物流业如何实现精细化工时成本管理,提升出库效率?

面对日益复杂的物流需求&#xff0c;以及不断上涨的人力成本。仓储物流企业想要在市场竞争中脱颖而出&#xff0c;不仅需要提升出库效率&#xff0c;满足消费者次日达甚至当日达的高要求&#xff0c;更需要控制人力成本&#xff0c;保证企业持续盈利的能力。盖雅新推出的 「劳…

恒运资本:史上最强暑期档!总票房突破147亿,前三都是国产片!

暑期档电影又爆了&#xff01; 就在刚刚曩昔的周末&#xff0c;在《封神第一部》《巨齿鲨2&#xff1a;深渊》《火热》等电影的大卖&#xff0c;以及《背注一掷》点映及预售的加持下&#xff0c;短短两天的大盘票房就到达10亿元。 其间&#xff0c;据猫眼专业版数据&#xff0…

Windows下安装Kafka(图文记录详细步骤)

Windows下安装Kafka Kafka简介一、Kafka安装前提安装Kafka之前&#xff0c;需要安装JDK、Zookeeper、Scala。1.1、JDK安装&#xff08;version&#xff1a;1.8&#xff09;1.1.1、JDK官网下载1.1.2、JDK网盘下载1.1.3、JDK安装 1.2、Zookeeper安装1.2.1、Zookeeper官网下载1.2.…