题目:
给定单链表,检测是否有环
思路:
建立两个单链表。从链表头开始遍历,让第一个每次走两步,第二个每次走一步。如果第一个能走到链尾,说明无环。如果链表中有环,这两个链表必然会在某个时刻相遇。
代码:
bool DetermineCycle(Node *node)
{
if(node->next == NULL || node->next->next == NULL)
{
return false;
}
Node *first, *second;
first = node->next->next;
second = node->next;
//当first走到链尾时,或者first和second相遇时退出循环体
while((first != NULL && first->next != NULL) && (first != second))
{
first = first->next->next;
second = second->next;
}
if(first == NULL || first->next == NULL)
{
return false;
}
if(first == second)
{
return true;
}
}