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

链表的中间结点

题目:

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

思路:

使用 快慢指针(Fast-Slow Pointers) 来找到链表的中间节点,快慢指针 slow:每次移动 1 步快指针 fast:每次移动 2 步。

代码:

struct ListNode* middleNode(struct ListNode* head) 
{
    if (head == NULL) 
    {
        return NULL; // 处理空链表
    }

    struct ListNode* slow = head;
    struct ListNode* fast = head;

    // 快指针每次走2步,慢指针每次走1步
    while (fast != NULL && fast->next != NULL) 
    {
        slow = slow->next;
        fast = fast->next->next;
    }

    return slow; // 慢指针指向中间节点
}

代码分析:

1. 快慢指针的初始化

  • 慢指针 slow:每次移动 1 步。

  • 快指针 fast:每次移动 2 步。

  • 初始位置:两者都从链表头节点 head 开始。

    struct ListNode* slow = head;
    struct ListNode* fast = head;

2. 移动规则

  • 循环条件:快指针能继续移动(即 fast 和 fast->next 均不为空)。
           这个条件是为了安全控制快指针的移动,确保在每次循环中能够安全访问 fast->next->next,避免空指针解引用导致的崩溃,防止 fast->next 为 NULL 时访问 fast->next->next。

    while (fast != NULL && fast->next != NULL)
    
  • 每次迭代:

    • 慢指针走 1 步:slow = slow->next

    • 快指针走 2 步:fast = fast->next->next

3. 终止条件

  • 当快指针无法继续移动时,慢指针指向中间节点:

    • 链表长度为奇数:fast 最终指向最后一个节点,slow 正好在中间。

      例:1 → 2 → 3 → 4 → 5
                            ↑
                       slow

    • 链表长度为偶数:fast 最终指向 NULLslow 指向中间偏右的节点。

      例:1 → 2 → 3 → 4
                            ↑
                         slow

4. 返回结果

  • 直接返回慢指针 slow,此时它指向中间节点。

    return slow;

相关文章:

  • Python----计算机视觉处理(Opencv:梯度处理:filiter2D算子,Sobel,Laplacian)
  • react中useRef和useMemo和useCallback
  • 常见框架漏洞--Spring
  • 部署Tomcat及jdk
  • Redis Sentinel 详解
  • linux的权限管理
  • 在 ASP.NET Core 中实现限流(Rate Limiting):保护服务免受滥用与攻击
  • Flask接口开发--POST接口
  • Linux(8.5)FTP
  • win32汇编环境,网络编程入门之十
  • C++实现决策树与随机森林调优困境:从性能瓶颈到高效突破
  • K8s 是什么? 基本元件、核心功能、4 大优点一次看!
  • 【差分隐私相关概念】一个问题的对偶转换
  • 【江协科技STM32】Unix时间戳BKP备份寄存器RTC实时时钟(学习笔记)
  • 基于SpringBoot的名著阅读网站
  • 【RHCE】综合实战练习
  • Unity 实现一个简易可拓展性的对话系统
  • deepseek搭建本地私有知识库dify安装介绍docker compose图文教程
  • Spring漏洞再现
  • 卷积神经网络 - 关于LeNet-5的若干问题的解释
  • 竞彩湃|巴萨客场淘汰国际米兰,巴黎双杀阿森纳
  • 黄道炫:南京102天——黄镇球的防空日记
  • 有乘客被高铁车门夹住?铁路回应:系突感不适下车,未受伤,列车正点发车
  • 习近平将对俄罗斯进行国事访问并出席纪念苏联伟大卫国战争胜利80周年庆典
  • 巴基斯坦宣布禁止印度船只入港
  • 韩国国民力量党宣布金文洙为该党总统候选人