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

876. 链表的中间节点

在这里插入图片描述

解题思路:快慢指针法(双指针)

我们不能直接随机访问链表中间节点(不像数组可以通过下标定位),所以要使用遍历技巧。

最优方法是使用:快慢指针

✨ 快慢指针技巧:

  • 定义两个指针:

    • slow 每次走 1 步;
    • fast 每次走 2 步;
  • fast 到达链表末尾时,slow 恰好指向链表的中间节点。

为什么这个方法有效?

  • 快指针走得比慢指针快 1 倍;
  • 所以当快指针走完链表时,慢指针只走了一半,正好指向中间。

代码实现

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/class Solution {
public:ListNode* middleNode(ListNode* head) {ListNode* fast = head;  // 快指针,每次走两步ListNode* low = head;   // 慢指针,每次走一步// 快指针到达末尾时,慢指针刚好在中间while (fast != nullptr && fast->next != nullptr) {fast = fast->next->next;low = low->next;}return low;}
};

复杂度分析

项目复杂度
时间复杂度O(n)
空间复杂度O(1)
只遍历一次链表✅ 高效

其中 n 是链表的长度。只使用了两个指针变量,空间非常节省。


http://www.dtcms.com/a/284760.html

相关文章:

  • CNN(卷积神经网络)--李宏毅deep-learning(起飞!!)
  • MISRA C-2012准则之常量
  • 【Dv3Admin】传递数据实现查询功能
  • RISC-V和ARM有何区别?
  • 学习日志12 python
  • 云原生技术与应用-Kubernetes架构原理与集群环境部署
  • MySQL详解一
  • 【自用】JavaSE--集合框架(一)--Collection集合体系
  • AC7670模块日志的抓取
  • Redis7 底层数据结构解析
  • 【Elasticsearch】Elasticsearch 快照恢复 API 参数详解
  • SmartX 用户建云实践|富士康:基于榫卯企业云平台构建分布式云,支撑全球多地工厂重要产线
  • 百度搜索引擎蜘蛛IP地址段
  • 数据结构排序算法总结(C语言实现)
  • 低功耗、高性能和高度集成的SoC,32位MCU和各种外围IO芯片XL2417D
  • java常见算法合集
  • Easy ARM2132
  • 线程(三) linux 同步
  • windows内核研究(驱动开发 第一个驱动程序和调试环境搭建)
  • 人工智能概念之八:常见的参数调优方法(交叉验证网格搜索、随机优化、贝叶斯优化、Hyperband优化)
  • 如何优化transceiver芯片的供电
  • 进阶向:智能图像背景移除工具
  • 在CentOS7.9服务器上安装.NET 8.0 SDK
  • 嵌入式时钟系统
  • LLM探针技术有哪些
  • 【图像质量评价指标】图像熵(Image Entropy) —— 熵值饱和现象
  • PySide笔记之信号连接信号
  • AI赋能农业:基于YOLO11的苹果瑕疵检测系统实战分享
  • 在Anaconda Prompt中安装库【保姆教程】
  • lwIP WebSocket 客户端 TCP PCB 泄漏问题分析与解决