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出发。一个指针的速度是另一个指针的两倍。当速度快的指针到达终点时,速度慢的指针正好就走了一半的路程,也就是到达了中间位置。

快慢指针使用方法总结:

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

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

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

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

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

相关推荐
weixin_307779131 小时前
Redshift SQL搜索表中所有字段的值
数据仓库·sql·算法·云计算·aws
十八岁讨厌编程3 小时前
【算法训练营Day26】动态规划part2
算法·动态规划
智者知已应修善业4 小时前
【C++无数组矩阵对角线平均值保留2位小数】2022-11-18
c语言·c++·经验分享·笔记·算法·矩阵
papership4 小时前
【入门级-算法-6、排序算法: 计数排序】
数据结构·算法·排序算法
pengpeng024 小时前
力扣每日一题 611. 有效三角形的个数
算法·leetcode·职场和发展
2401_840105205 小时前
GESP C++5级 2025年6月编程2题解:最大公因数
数据结构·c++·算法
未知陨落5 小时前
LeetCode:56.子集
算法·leetcode·深度优先
PAK向日葵5 小时前
【算法导论】一道涉及到溢出处理的笔试题
算法·面试
哈泽尔都5 小时前
运动控制教学——5分钟学会样条曲线算法!(三次样条曲线,B样条曲线)
c++·人工智能·算法·机器学习·matlab·贪心算法·机器人
小镇学者6 小时前
【NOI】在信奥赛中 什么是函数交互题?
算法