您现在的位置是:首页 >技术交流 >【LeetCode】数据结构刷题(2)[查找链表的中间节点]网站首页技术交流

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

初阳785 2023-06-14 08:00:03
简介【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.类似题目练习

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

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。