1.如何判断链表是否有环
通过快慢指针来判断是否有环,慢指针每次行走1步,快指针每次走2步,如果快指针等于慢指针说明有环,如果快指针为空说明没有环。
static bool judge(Point P)
{
if (P == null) return false;
Point A = P, B = P;
while (A.Next != null && B.Next != null && B.Next.Next != null)
{
A = A.Next;
B = B.Next.Next;
if (A == B) return true;
}
return false;
}
如果传进来的值为空返回false, 否则进行判断
2、怎么找到环
static Point judge(Point P)
{
if (P == null) return null;
Point A = P, B = P;
while (B.Next != null && B.Next.Next != null)
{
A = A.Next;
B = B.Next.Next;
if (A == B)
{
A = P;
while (true)
{
if (A == B) return A;
A = A.Next;
B = B.Next;
}
}
}
return null;
}
当确定环的位置后,把快慢任意节点指向头节点,然后按相同速度移动,再次相等时,就是环的位置。