力扣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;
}
相关推荐
Python私教4 分钟前
C 语言进制转换全景指南
c语言·开发语言·arm开发
17岁的勇气7 分钟前
Unity Shader unity文档学习笔记(二十二):雪地几种实现方式(1. 2D贴花式 2.3D曲面细分并且实现顶点偏移)
笔记·学习·unity·shader
Q741_14742 分钟前
C++ 分治 归并排序 归并排序VS快速排序 力扣 912. 排序数组 题解 每日一题
c++·算法·leetcode·归并排序·分治
三体世界1 小时前
Qt从入门到放弃学习之路(1)
开发语言·c++·git·qt·学习·前端框架·编辑器
victory04311 小时前
K8S 安装 部署 文档
算法·贪心算法·kubernetes
hrrrrb1 小时前
【机器学习】无监督学习
人工智能·学习·机器学习
月疯1 小时前
样本熵和泊松指数的计算流程!!!
算法·机器学习·概率论
机器学习之心1 小时前
MATLAB基于自适应动态特征加权的K-means算法
算法·matlab·kmeans
minji...1 小时前
算法题 逆波兰表达式/计算器
数据结构·c++·算法·1024程序员节