一个链表没有环,则遍历一遍会指向最后一个节点然后停下,如果一个存在环路则在遍历的时候会一直循环遍历环的各个节点,那么判断是否有环即判断否当前指针重复指向同一段内存单元,我们可以利用快慢指针来判断,如果遇到的结尾停止,则没有环,如果快慢指针相遇,则存在环路
bool hasCycle(ListNode *head) {
if(head==NULL)
return false;
ListNode *fast = head->next;
ListNode *slow = head;
while(fast)
{
if(fast==slow)
{
return true;
}
if(fast->next)
fast = fast->next->next;
else
return false;
slow = slow->next;
}
return false;
}