力扣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;
}
相关推荐
程序员Jared9 分钟前
深入浅出C语言——文件操作
c语言
Ulana15 分钟前
计算机基础10大高频考题解析
java·人工智能·算法
智行众维20 分钟前
【用户心得】SCANeR™Studio学习笔记(六):人因工程Pack——一站式搞定驾驶模拟的多模态数据同步
笔记·学习·自动驾驶·汽车·仿真·scaner·人因工程
Queenie_Charlie26 分钟前
数字去重(set)
数据结构·c++·set
kissgoodbye201228 分钟前
cadence学习之基础知识
网络·学习
xian_wwq41 分钟前
【学习笔记】基于人工智能的火电机组全局性能一体化优化研究
人工智能·笔记·学习·火电
圣保罗的大教堂43 分钟前
leetcode 3433. 统计用户被提及情况 中等
leetcode
阿蒙Amon1 小时前
JavaScript学习笔记:6.表达式和运算符
javascript·笔记·学习
Ayanami_Reii1 小时前
区间不同数的个数-树状数组/线段树/莫队/主席树
数据结构·c++·算法·线段树·树状数组·主席树·莫队
李玮豪Jimmy1 小时前
Day37:动态规划part10(300.最长递增子序列、674.最长连续递增序列 、718.最长重复子数组)
算法·动态规划