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

快慢指针使用方法总结:

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

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

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

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

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

相关推荐
雾里看山几秒前
顺序表VS单链表VS带头双向循环链表
数据结构·链表
大千AI助手2 小时前
DTW模版匹配:弹性对齐的时间序列相似度度量算法
人工智能·算法·机器学习·数据挖掘·模版匹配·dtw模版匹配
YuTaoShao3 小时前
【LeetCode 热题 100】48. 旋转图像——转置+水平翻转
java·算法·leetcode·职场和发展
生态遥感监测笔记4 小时前
GEE利用已有土地利用数据选取样本点并进行分类
人工智能·算法·机器学习·分类·数据挖掘
Tony沈哲4 小时前
macOS 上为 Compose Desktop 构建跨架构图像处理 dylib:OpenCV + libraw + libheif 实践指南
opencv·算法
刘海东刘海东5 小时前
结构型智能科技的关键可行性——信息型智能向结构型智能的转变(修改提纲)
人工智能·算法·机器学习
pumpkin845145 小时前
Rust 调用 C 函数的 FFI
c语言·算法·rust
挺菜的5 小时前
【算法刷题记录(简单题)003】统计大写字母个数(java代码实现)
java·数据结构·算法
mit6.8245 小时前
7.6 优先队列| dijkstra | hash | rust
算法