leetcode 141. 环形链表 (判断链表是否有环)
小于 1 分钟
判断链表是否包含环属于经典问题了,解决方案也是用:
每当慢指针 slow
前进一步,快指针 fast
就前进两步。如果 fast
最终遇到空指针,说明链表中没有环;如果 fast
最终和 slow
相遇,那肯定是 fast
超过了 slow
一圈(相对静止),说明链表中含有环。
bool hasCycle(ListNode* head) {
// 初始化快慢指针,指向头结点
ListNode* fast = head;
ListNode* slow = head;
// 快指针到尾部时停止
while(fast && fast->next) {
// 慢指针走一步,快指针走两步
fast = fast->next->next;
slow = slow->next;
// 快慢指针相遇,说明含有环
if(fast == slow) {
return ture;
}
}
// 不包含环
return false;
}