判断链表是否有循环
利用两个指针循环遍历链表,其中一个指针比另一个指针多走一步,那么循环下去只要是循环的,就一定会相遇~
注意判断NULL的情况
class Solution
{
public:
bool hasCycle(ListNode *head)
{
if (!head || !head->next)
return false;
ListNode *oneStep = head;
ListNode *twoStep = head;
while (twoStep->next != NULL && twoStep->next->next != NULL)
{
oneStep = oneStep->next;
twoStep = twoStep->next->next;
if (oneStep == twoStep)
return true;
}
return false;
}
};