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

LeetCode - 876. 链表的中间结点

题目

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

快慢指针解法

初始化两个指针:

  • 慢指针(slow):每次移动一步
  • 快指针(fast):每次移动两步

同时移动两个指针:

  • 当fast指针到达链表末尾或者倒数第二个节点时,slow指针正好位于链表的中间位置
  • 如果链表长度为奇数,slow指向中间节点
  • 如果链表长度为偶数,slow指向第二个中间节点

返回结果:

  • 返回slow指针所指的节点

读者可能出现的错误写法

class Solution {
public:ListNode* middleNode(ListNode* head) {ListNode* slow = head;ListNode* fast = head;while(fast){slow = slow->next;fast = fast->next->next;}return slow;}
};

缺少终止条件检查:

  • 这个while循环只检查了fast是否为空,但没有检查fast->next
  • 当fast->next为空时,访问fast->next->next会导致空指针错误

指针移动逻辑:

  • 如果链表只有一个节点,fast不为空,但fast->next为空
  • 此时执行fast = fast->next->next会导致空指针错误

正确的写法 

class Solution {
public:ListNode* middleNode(ListNode* head) {ListNode* slow = head;ListNode* fast = head;while(fast&&fast->next){slow = slow->next;fast = fast->next->next;}return slow;}
};
http://www.lryc.cn/news/2400808.html

相关文章:

  • 概率单纯形(Probability Simplex)
  • Go语言爬虫系列教程4:使用正则表达式解析HTML内容
  • 6.4 C++作业
  • rabbitmq Topic交换机简介
  • 网络交换机:构建高效、安全、灵活局域网的基石
  • 【ArcGIS微课1000例】0148:Geographic Imager6.2使用教程
  • 【Oracle】存储过程
  • CppCon 2015 学习A Few Good Types
  • winrm登录失败,指定的凭据被服务器拒绝
  • 单元测试-断言常见注解
  • TDengine 在电力行业如何使用 AI ?
  • Java抽象工厂模式详解
  • matlab实现高斯烟羽模型算法
  • SpringBoot parent依赖高版本覆盖低版本问题
  • OpenCV C/C++ 视频播放器 (支持调速和进度控制)
  • 【Linux庖丁解牛】—自定义shell的编写!
  • C++抽象类与多态实战解析
  • OpenAI API 流式传输
  • 嵌入式分析利器:DuckDB与SqlSugar实战
  • 嵌入式学习笔记 - freeRTOS任务设计要点
  • Linux运维笔记:1010实验室电脑资源规范使用指南
  • 12:点云处理—调平,角度,平面度,高度,体积
  • Marketo 集成 8x8 Connect 短信 API 指南
  • 【Docker 从入门到实战全攻略(二):核心概念 + 命令详解 + 部署案例】
  • Elasticsearch索引(Index)介绍,它与数据库中的表有什么区别?
  • Elasticsearch中什么是分析器(Analyzer)?它由哪些组件组成?
  • 使用 SseEmitter 实现 Spring Boot 后端的流式传输和前端的数据接收
  • .net Avalonia 在centos部署
  • MyBatis深度解析:XML/注解配置与动态SQL编写实战
  • 面试经验 对常用 LLM 工具链(如 LlamaFactory)的熟悉程度和实践经验