“ 五一假期快要结束啦,让我们用一道简单的算法题来欢送五一假期末尾图片图片。今天算法很简单,让我们进行一个放松,涉及到的知识点是链表和双指针。”
PS:如果你对链表还不是很熟悉的话,那么我建议你先看看下面这篇我写的文章,对链表有了了解之后再来看看这道题。
老规矩,上题目,先看看下面这张图的题目描述:
环形链表题目描述
看了题目描述之后,你是不是心中已经有了思路了呢?当然如果你还没有思路的话,那么我再给你一个提示:双指针。
接下来就是讲解思路的时刻:首先在讲解本题目之前,我需要让大家联想到赛道跑步的问题,比如A和B进行比赛,A的速度比B快,那么一定存在A会追上B他们会相遇的过程。而这道题就是A和B比赛的衍生,为什么呢?因为它是环形。关于这一类题目A追B会相遇的问题,就是一个快慢问题—快慢指针。对于快慢指针,如果有环的话那么一定会相遇,没有环的话不会相遇的。
有了上面的铺垫,我们再回到这道题中:利用快慢指针,我们定义一个fast和slow变量用于记录快慢两个指针变化,快指针它每次变化值next.next,而慢指针的话它的变化值就是next即可。然后不断的循环,至于循环结束条件在于fast以及它的next是否存在。
在看了代码思路之后是不是心中有了解题思路了,其实整体实现是十分简单的,关键在于如何巧妙的化解。接下来就是上代码的时刻啦:
1 | /** |
有没有很简单的感觉,如果你还有问题的话欢迎在下方留言哟。如果你觉得该文章对你有帮助的话,不妨来一个三连哟。