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

快慢指针使用方法总结:

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

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

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

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

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

相关推荐
_poplar_6 分钟前
08.5【C++ 初阶】实现一个相对完整的日期类--附带源码
c语言·开发语言·数据结构·c++·vscode·算法·vim
停停的茶1 小时前
决策树(2)
算法·决策树·机器学习
汤永红1 小时前
week2-[一维数组]最大元素
数据结构·c++·算法·信睡奥赛
菜鸟555554 小时前
图论:Floyd算法
算法·图论
呼啦啦啦啦啦啦啦啦9 小时前
常见的排序算法
java·算法·排序算法
胡萝卜3.010 小时前
数据结构初阶:排序算法(一)插入排序、选择排序
数据结构·笔记·学习·算法·排序算法·学习方法
地平线开发者10 小时前
LLM 中 token 简介与 bert 实操解读
算法·自动驾驶
scx2013100411 小时前
20250814 最小生成树和重构树总结
c++·算法·最小生成树·重构树
阿巴~阿巴~11 小时前
冒泡排序算法
c语言·开发语言·算法·排序算法
散11211 小时前
01数据结构-交换排序
数据结构·算法