本文主要是介绍环形链表(判断链表中是否有环)的讲解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一:题目
二:思路讲解
1:采用快慢指针的方法,一个fast指针一次移动两个节点,一个slow指针一次移动一个节点。
2:两个指针从头指针开始往后遍历,如果fast指针或者fast->next 有一个为空,那就代表这不是带环链表。
fast指针为空,代表这是一个偶数个节点的链表,fast1,3,5这样的移动,最后一次会到尾节点的下一个节点,所以fast为空。
fast->next指针为空,代表这是一个奇数个节点的链表,fast1,3,5这样的移动,最后一次会到尾节点,所以它的next为空。
以上这两种情况都代表这个链表不带环
3:当slow和fast遍历的时候,如果fast和slow相等,就代表该链表带环,因为以上两种情况slow和fast永远不会相等。(前面的直线代表进入环前面的节点,后面的圆圈就代表入环后的所有节点)
而相等只会出现在slow和fast指针两个都进入了环,彼此开始进行追击,总有一个节点,二者会相遇,即slow=fast。
代码展示 :
这篇关于环形链表(判断链表中是否有环)的讲解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!