算法题中,会有一种题目让我们去判断链表里的是否有循环。
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

这里就需要我们要用快慢指针来进行搜索,直接提供代码
- class Solution {
- public:
- bool hasCycle(ListNode *head) {
- ListNode *slow=head;
- ListNode *fast=head;
- while(fast&&fast->next)
- {
- slow=slow->next;
- fast=fast->next->next;
- if(slow==fast)
- return true;
- }
- return false;
- }
- };
工作原理如下图

因为fast始终会比slow快一步,所以在循环里始终会相遇,若没有循环,那么fast就会读取到最后nullptr处,然后终止判断即可。