Если вы просто хотите найти ответ, сделайте заяц-черепаху, чтобы определить, в какой точке определенно есть петля. Затем запустите счетчик и посчитайте, сколько итераций вы должны сделать, чтобы достичь точки, которую вы впервые нашли. Возможно, это не самый эффективный вариант, но он дает правильный ответ.
Некоторый код C ++:
#include <iostream>
struct node
{
node(node* next)
: next(next)
{ }
node* next;
};
int main(int argc, char* argv[])
{
node h(NULL), g(&h), f(&g), e(&f), d(&e), c(&d), b(&c), a(&b);
h.next = &c;
node* tortoise = &a;
node* hare = &b;
while(tortoise != hare)
{
tortoise = tortoise->next;
hare = hare->next->next;
}
int count = 1;
tortoise = tortoise->next;
while(tortoise != hare)
{
++count;
tortoise = tortoise->next;
}
std::cout << "Size of cycle: " << count << "\n";
return 0;
}
Обратите внимание, что вам придется проделать дополнительную работу, чтобы определить, достигните ли вы конца, а не зацикливаться, в случае, если у вас фактически нет цикла. Об этом должны позаботиться традиционные черепахи:
http://en.wikipedia.org/wiki/Cycle_detection