带环链表
算法题中,会有一种题目让我们去判断链表里的是否有循环。
力扣(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处,然后终止判断即可。
相关题目
202. 快乐数 - 力扣(LeetCode)