力扣876:链表的中间结点

力扣876:链表的中间结点

题目描述:

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

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

示例 1:

输入:head = [1,2,3,4,5]

输出:[3,4,5]

解释:链表只有一个中间结点,值为 3 。
示例 2:

输入:head = [1,2,3,4,5,6]

输出:[4,5,6]

解释:该链表有两个中间结点,值分别为 3 和 4 ,返回第二个结点。

提示:

链表的结点数范围是 [1, 100]

1 <= Node.val <= 100

分析:

快慢指针思想

定义两个指针,快指针fast,慢指针slow,从头开始遍历:

fast一次走两步,慢指针一次走两步

遍历结束后,慢指针所在的节点就是中间节点,返回slow即可

那么什么时候遍历结束呢?

链表为奇数个时:



fast->next为空时,遍历结束。

链表为偶数个时:


fast为空时,遍历结束。

代码:

cpp 复制代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* middleNode(struct ListNode* head) {
    struct ListNode*fast=head,*slow=head;
    while(fast&&fast->next)
    {
        fast=fast->next->next;
        slow=slow->next;
    }
    return slow;
}
相关推荐
努力可抵万难4 分钟前
【算法系列】leetcode1419 数青蛙 --模拟
c++·算法·模拟
ww180004 分钟前
多目标粒子群优化算法-MOPSO-(机器人路径规划/多目标信号处理(图像/音频))
人工智能·算法·分类·信号处理
YH_DevJourney14 分钟前
Linux-C/C++《C/9、信号:基础》(基本概念、信号分类、信号传递等)
linux·c语言·c++
CS创新实验室15 分钟前
计算机考研之数据结构:大 O 记号
数据结构·考研
让我们一起加油好吗38 分钟前
【数学】数论干货(疑似密码学基础)
c语言·visualstudio·密码学
wen__xvn2 小时前
每日一题洛谷P1914 小书童——凯撒密码c++
数据结构·c++·算法
BUG 劝退师2 小时前
八大经典排序算法
数据结构·算法·排序算法
陈无左耳、3 小时前
HarmonyOS学习第2天: 解锁语言与框架的无限可能
学习·华为·harmonyos
朝九晚五ฺ3 小时前
【Linux探索学习】第三十弹——线程互斥与同步(上):深入理解线程保证安全的机制
linux·运维·学习
m0_748240913 小时前
SpringMVC 请求参数接收
前端·javascript·算法