题面:
判断一个单链表是否包含一个环;
解法:
Floyd判圈算法可以解决此问题;
这里提供另外一种算法,当然这种算法只能判断是否有环,并不能求出环的长度;
1、很容易明白当一个链成环时,它会绕着指针回到环的起点;
2、那么当我们把环的起点的指针反向指回去的时候,我们就可以顺利找到链表的起点;
3、看到这里应该是很明白了,我们通过把指针反向指回去,如果当指针又回到链表头结点时,表示有环;
4、时间的时空复杂度都为O(n);
代码:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: bool hasCycle(ListNode *head) { if(
链表判圈算法
最新推荐文章于 2023-04-06 17:05:42 发布
该博客介绍了一种使用Floyd判圈算法来判断单链表中是否存在环的方法。通过反向指针,当指针回到链表头结点时,确认链表存在环,时间复杂度为O(n)。
摘要由CSDN通过智能技术生成