力扣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;
}
相关推荐
Phoebe鑫几秒前
数据结构每日一题day17(链表)★★★★★
数据结构·链表
梁下轻语的秋缘3 分钟前
每日c/c++题 备战蓝桥杯(洛谷P1115 最大子段和)
c语言·c++·蓝桥杯
chenyuhao20245 分钟前
链表面试题7之相交链表
数据结构·算法·链表·面试·c#
Pluchon16 分钟前
硅基计划2.0 学习总结 壹 Java初阶
java·开发语言·学习·算法
PassLink_21 分钟前
[计算机科学#14]:数据结构
数据结构·计算机科学·计算机发展史
仙人掌_lz28 分钟前
理解多智能体深度确定性策略梯度MADDPG算法:基于python从零实现
python·算法·强化学习·策略梯度·rl
是代码侠呀1 小时前
从前端视角看网络协议的演进
leetcode·开源·github·github star·github 加星
wjm0410061 小时前
B树和B+树
数据结构·b树
PXM的算法星球1 小时前
一文了解B+树的删除原理
数据结构·b树
Brookty1 小时前
【Java学习】Lambda表达式
java·学习