在只给出头指针的条件下,如何判读单向链表存在循环
最直观的,链表的指针是否有指向同一地址的,如果有则存在。
还有一种较为灵活的算法,设置两个指针,其中一个的指针增量是另一个的一倍,追逐另一个,如果相遇了则存在循环。
伪代码如下:
*p = head .next;
*q = p;
while(p != null && q != null && p.next != null)
{
if(*q ==*p) equal;
else not equal;
}
循环执行完说明没有相遇,not equal