前言:
正如标题所言,小编今天要讲述快慢指针的相关习题,可能有些读者朋友会有些疑问了,这快慢指针是个什么东西?不要着急,下面紧跟小编的步伐,开启我们今天的快慢指针之旅!
目录:
1.快慢指针是什么?
2.快慢指针习题详解
2.1.链表的中间结点
2.2.环形链表
2.3.链表的回文结构
2.4.环形链表Ⅱ
正文:
1.快慢指针是什么
顾名思义,快慢指针就是一个快指针和一个慢指针,一个指针向后走到速度快(一般我们在使使用快指针的时候让它向后走两步),所以被称之为快指针,一个指针向后走的速度慢(一般我们在使用满指针的时候让它走一步),所以被称之为慢指针,这两个指针对于我们在处理一些习题的时候有很大的作用,下面紧跟小编的步伐,开始进入今天的快慢指针之旅~
2.快慢指针习题详解
2.1.链表的中间结点
老规矩,先给上习题的链接:876. 链表的中间结点 - 力扣(LeetCode)
小编相信,很多读者朋友拿到这个题目的时候感觉是有点懵的(大佬除外),小编在当初看到这个题的时候也是感觉脑子有些懵,如果这个题目是数组的化,那么就会显的很简单,问题是这个不是数组,而是单链表,我们不可以用除法直接寻找单链表,我们需要遍历单链表来找到中间节点,小编那时候想到过一个解法,就是把单链表的每一个元素都放入到一个新开辟的数组中,然后我们通过数组找到中间节点里面存的数据,然后通过数据找到中间节点,这个做法虽然是可行的,但是在这里就显得很冗余,写代码,我们就要越简单越好,于是小编在之后学到了一个解法,那么就是用快慢指针来寻找中间节点,下面小编讲述下如何通过快慢指针找到中间结点:
首先,我们需要用到两个指针,我们可以先让这两个指针指向头节点,之后我们需要进入循环来找中间结点,至于循环的条件我们稍后再说,我们让满指针往后走一步,快指针往后走两步,我们可以发现,当快指针的下一个结点走向空或者自己本身就是空的时候,此时慢指针指向的就是中间结点,所以我们知道了循环的条件就是快指针本身或者它的下一个结点不为空,下面小编通过图文帮助读者朋友们进行更好的了解:
先放置好指针: