LeetCode 876. 链表的中间结点

876. 链表的中间结点

题目链接:876. 链表的中间结点

题目描述:给你单链表的头结点 head ,请你找出并返回链表的中间结点。

如果有两个中间结点,则返回第二个中间结点。

cpp 复制代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
 typedef struct ListNode ListNode;
struct ListNode* middleNode(struct ListNode* head) 
{
    //创建快慢指针
    ListNode* slow = head;
    ListNode* fast = head;
    
    while(fast && fast->next)
    {
        //慢指针走一步,快指针走两步
        slow = slow->next;
        fast = fast->next->next;
    }
    return slow;
}

解题思路:

有两个指针在同一链表上,从同一头结点 head出发。一个指针的速度是另一个指针的两倍。当速度快的指针到达终点时,速度慢的指针正好就走了一半的路程,也就是到达了中间位置。

快慢指针使用方法总结:

当你遇到一个链表问题时,可以问自己以下几个问题来判断是否适用快慢指针:

  • 我是不是在寻找一个特殊位置的节点,而不是特定值的节点?

  • 这个问题能否通过两个指针的"追及"或"相对距离"来解决?

  • 我能否通过让一个指针比另一个走得快,或者先走几步,来创造出解决问题的有利条件?

如果答案是肯定的,那么快慢指针很可能就是解决问题的金钥匙。

相关推荐
技术小黑7 小时前
CNN算法实战系列03 | DenseNet121算法实战与解析
pytorch·深度学习·算法·cnn
wearegogog1237 小时前
三电平SVPWM逆变器仿真指南
单片机·算法
笨笨饿7 小时前
74_SysTick滴答定时器中断
c语言·开发语言·人工智能·单片机·嵌入式硬件·算法·学习方法
pkowner8 小时前
若依分页问题及解决方法
java·前端·算法
呃呃本8 小时前
算法题(栈)
算法
通信小呆呆8 小时前
基于 ADMM-MFOCUSS 的捷变频雷达扩展目标稀疏重构原理
算法·重构·信息与通信·信号处理·雷达
橙淮9 小时前
Java数组与链表:特性对比与应用场景
数据结构·算法
炽烈小老头9 小时前
【每天学习一点算法 2026/05/15】被围绕的区域
学习·算法·深度优先
芜湖xin9 小时前
【题解-洛谷】P1012 [NOIP 1998 提高组] 拼数
算法·贪心
xiaoxiaoxiaolll9 小时前
金属结构疲劳寿命预测与健康监测技术
人工智能·算法·机器学习