【LeetCode】数据结构刷题(2)[查找链表的中间节点]

所属专栏:玩转数据结构题型
博主首页:初阳785
代码托管:chuyang785
感谢大家的支持,您的点赞和关注是对我最大的支持!!!
博主也会更加的努力,创作出更优质的博文!!
关注我,关注我,关注我,重要的事情说三遍!!!!!!!!

1.题目来源

查找链表的中间节点

2.题目描述

给你单链表的头结点 head ,请你找出并返回链表的中间结点。

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

在这里插入图片描述

3.解题思路

这里我们引入一个重要的知识点快慢双指针
这里要求我们找到中间节点,我们不妨创建两个变量,一个fast,一个low,low走一步的时候fast走两步。这样的话只要fast走完了low就找到了中间节点。
但是我们节点的个数有两种:
第一种:有奇数个节点。
第二种:有偶数个节点。
所以我们fast结束的标志也有两种。
第一种是:fast->next=NULL。
第二种是:fast=NULL。

至于为什么这样可以找到中间节点其实也很好理解,我们的low走一步,fast走两步,也就是说我们fast走到步数是low的两倍,所以只要fast走完了,我们的low就刚好走了fast一半的路程。

我们花个图来理解以下:
在这里插入图片描述
在这里插入图片描述
第一种结束标志:
在这里插入图片描述
第二种结束标志:
在这里插入图片描述

4.代码展示

struct ListNode* middleNode(struct ListNode* head)
{
    if(head==NULL)
        return NULL;
    struct ListNode *fast,*low;
    fast=low=head; 
    while(fast && fast->next)//一个奇数个一个偶数个的结束标志
    {
        low=low->next;
        fast=fast->next->next;            
    }   
    return low;
}

5.类似题目练习

删除中间节点
这个题目和上面的题目是差不多的,大家可以点进去练习练习。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三问走天下

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值