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

快慢指针使用方法总结:

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

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

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

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

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

相关推荐
2401_8414956411 分钟前
【数据结构】基于BF算法的树种病毒检测
java·数据结构·c++·python·算法·字符串·模式匹配
蒙奇D索大27 分钟前
【算法】递归算法实战:汉诺塔问题详解与代码实现
c语言·考研·算法·面试·改行学it
一只鱼^_1 小时前
力扣第 474 场周赛
数据结构·算法·leetcode·贪心算法·逻辑回归·深度优先·启发式算法
叫我龙翔1 小时前
【数据结构】从零开始认识图论 --- 单源/多源最短路算法
数据结构·算法·图论
深圳佛手2 小时前
几种限流算法介绍和使用场景
网络·算法
陌路202 小时前
S14排序算法--基数排序
算法·排序算法
ysa0510302 小时前
虚拟位置映射(标签鸽
数据结构·c++·笔记·算法
Yue丶越2 小时前
【C语言】深入理解指针(二)
c语言·开发语言·数据结构·算法·排序算法
m0_748248022 小时前
C++中的位运算符:与、或、异或详解
java·c++·算法
沐浴露z2 小时前
详解【限流算法】:令牌桶、漏桶、计算器算法及Java实现
java·算法·限流算法