力扣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 分钟前
dfs二叉树中的深搜(回溯、剪枝)--力扣129、814、230、257
算法·leetcode·深度优先·dfs
Kisorge5 分钟前
【控制学】控制学分类
c语言
迷迭所归处9 分钟前
C语言 —— 指尖跃迁 刻印永恒 - 文件操作
c语言
我不会JAVA!10 分钟前
C++ 实现A*算法
c++·算法
一叶祇秋18 分钟前
Leetcode - 双周赛135
算法·leetcode·职场和发展
阿图灵23 分钟前
文章记单词 | 第34篇(六级)
学习·学习方法
小王努力学编程24 分钟前
贪心算法学习C++
开发语言·c++·学习·算法·leetcode·贪心算法
无限大634 分钟前
数据结构与算法入门 Day 0:程序世界的基石与密码
后端·算法·程序员
北京地铁1号线35 分钟前
菊厂20250416软件机考T2解答(200分)
python·算法
-曾牛37 分钟前
Git完全指南:从入门到精通版本控制 ------- Git 工作区、暂存区和版本库(4)
java·git·学习·个人开发