0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

LeetCode876链表的中间结点介绍

算法与数据结构 来源:吴师兄学算法 2023-01-11 17:58 次阅读

一、题目描述

给定一个头结点为head的非空单链表,返回链表的中间结点。

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

示例 1:

输入:[1,2,3,4,5]
输出:此列表中的结点 3 (序列化形式:[3,4,5])
返回的结点值为 3 。(测评系统对该结点序列化表述是[3,4,5])。
注意,我们返回了一个 ListNode 类型的对象 ans,这样:
ans.val=3,ans.next.val=4,ans.next.next.val=5,以及ans.next.next.next=NULL.

示例 2:

输入:[1,2,3,4,5,6]
输出:此列表中的结点 4 (序列化形式:[4,5,6])
由于该列表有两个中间结点,值分别为 3 和 4,我们返回第二个结点。

提示:

给定链表的结点数介于1和100之间。

二、题目解析

我个人认为这道题目是最好理解快慢指针这个知识点了。

poYBAGO-iMSAZNB2AABfm8QdN6I280.jpg
pYYBAGO-iMyAIkPvAABaxeo4Lhc600.jpg
pYYBAGO-iNSARFnvAABmXvfrc-c727.jpg

不难理解整体的思路如下:

1、设置两个指针,一开始都指向链表的头节点;

2、接下来,让这两个指针向前移动;

3、如果可以移动,那么就会让快指针每次移动两步,慢指针每次移动一步;

4、而快指针可以移动两步的前提就是当前节点不为空,同时下一节点也不为空,这样才能保证 fast.next 有值、fast.next.next 有值

5、最后,slow 指向的就是中间节点。

三、参考代码

// LeetCode 100题精讲:https://mp.weixin.qq.com/s/yznC53g46phq3qF7V4-obA
//作者:程序员吴师兄
//链表的中间结点(LeetCode 876):https://leetcode.cn/problems/middle-of-the-linked-list/
classSolution{
publicListNodemiddleNode(ListNodehead){

//设置两个指针,一开始都指向链表的头节点
ListNodeslow=head;

ListNodefast=head;

//接下来,让这两个指针向前移动
//如果可以移动,那么就会让快指针每次移动两步,慢指针每次移动一步
//而快指针可以移动两步的前提就是当前节点不为空,同时下一节点也不为空
//这样才能保证fast.next有值、fast.next.next有值
while(fast!=null&&fast.next!=null){

//慢指针每次移动一步
slow=slow.next;

//快指针每次移动两步
fast=fast.next.next;
}

//最后,slow指向的就是中间节点
returnslow;

}
}





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 链表
    +关注

    关注

    0

    文章

    80

    浏览量

    10464

原文标题:【链表篇】LeetCode 876、链表的中间结点

文章出处:【微信号:TheAlgorithm,微信公众号:算法与数据结构】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    链表结点的数据结构该如何定义

    当用户需要使用链表管理数据时,仅需关联数据和链表结点,最简单的方式是将数据和链表结点打包在一起。
    的头像 发表于 09-20 16:28 1.5w次阅读
    <b class='flag-5'>链表</b><b class='flag-5'>结点</b>的数据结构该如何定义

    周立功阐释高效的双向链表如何用

    实际上循环链表,无论是头结点、尾结点还是普通结点,其本质上都是一样的。
    的头像 发表于 09-25 14:14 6359次阅读

    数据结构:单链表的排序

    给定一个单链表的头结点head(该结点有值),长度为n的无序单链表,对其按升序排序后,返回新链表。如当输入
    的头像 发表于 11-30 13:56 437次阅读
    数据结构:单<b class='flag-5'>链表</b>的排序

    链表代码头结点数据无效

    //注意:该文件操作的单链表为带头结点链表,头结点数据无效#include #include #include #define OK 1#define ERROR 0typedef
    发表于 03-27 00:43

    链表的缺陷是什么

    链表有一定的缺陷,就是单向性,只能从一个结点到下一个节点,而不能访问到上一个结点,而循环链表就可以解决这一问题,当然,用双向链表更加方便#
    发表于 07-14 08:09

    在RT-Thread中普通链表和侵入式链表有何区别

    ,这个成员变量是一个通用的链表结点。二者区别普通的链表和侵入式链表的区别在于普通的链表结点的指针
    发表于 04-11 15:15

    线性表、顺序表和链表

    线性表、顺序表和链表:1、线性结构的定义:空或者只有一个结点。或者1、存在唯一的一个被称之为”第一个“的结点。2、存在唯一的一个被称之为”最后一个“的结点。3、除第一
    发表于 08-13 13:51 0次下载

    周立功新著内容分享:双向链表是什么?

    单向链表的添加、删除操作,都必须找到当前结点的上一个结点,以便修改上一个结点的p_next指针完成相应的操作。
    的头像 发表于 09-22 18:24 5856次阅读

    合并两个排序的链表

    合并两个排序的链表一、题目要求 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 二、我的思路
    发表于 01-16 22:02 477次阅读

    以后再也不怕别人问「单链表」的问题啦

    「头指针」顾名思义,是指向链表第一个结点的指针,如果有头结点的话,那么就是指向头结点的指针。它是链表的必备元素且无论
    的头像 发表于 11-23 11:30 2189次阅读
    以后再也不怕别人问「单<b class='flag-5'>链表</b>」的问题啦

    C++结构体与链表的实验报告资料免费下载

    本文档的主要内容详细介绍的是C++结构体与链表的实验报告资料免费下载。 一、目的和要求1. 掌握结构体类型、结构体变量的基本概念;2. 掌握结构体指针、结构体数组的应用;3. 掌握链表的基本概念;4. 掌握
    发表于 05-27 08:00 4次下载
    C++结构体与<b class='flag-5'>链表</b>的实验报告资料免费下载

    基于三叉树链表的编译器中间结构的设计方案研究

    基于树形结构的中间结构是现今大多数编译器中间结构的主流设计方案,比如GCC、LCC、TCC等均使用二叉树或者多又树作为其中间结构。本文介绍的是一种三叉树的设计方案。该方案中,以
    的头像 发表于 05-14 09:13 3244次阅读
    基于三叉树<b class='flag-5'>链表</b>的编译器<b class='flag-5'>中间</b>结构的设计方案研究

    双向循环链表函数是什么?如何去实现它?

    双向循环链表结点内部有2个指针prev和next分别指向前后的结点结点定义代码如下。
    的头像 发表于 06-17 12:50 1386次阅读

    链表数据结构基本概念

    链表基本概念 头指针: 头指针是指链表指向第一个结点的指针,若链表有头结点,则是指向头结点的指针
    的头像 发表于 07-27 11:14 613次阅读
    <b class='flag-5'>链表</b>数据结构基本概念

    链表和双链表的区别在哪里

    链表和双链表的区别 单链表的每一个节点中只有指向下一个结点的指针,不能进行回溯。 双链表的每一个节点给中既有指向下一个
    的头像 发表于 07-27 11:20 1105次阅读
    单<b class='flag-5'>链表</b>和双<b class='flag-5'>链表</b>的区别在哪里