У меня есть одноуровневый список, который имеет 100 узлов. Мне нужно проверить этот связанный список или нет?Уменьшите количество итераций при прохождении в связанном списке в C
Это может быть достигнуто путем перемещения списка и необходимо проверить поле связи последнего узла, равное головке.
struct node *temp1, *temp2;
while(i != 100) {
temp2 = temp1->link;
if(temp2==head) {
printf("circular");
break;
else
temp1=temp1->link;
i++;
}
Этот метод займет не более 100 итераций. Я хочу уменьшить это до половины, я имею в виду 50 итераций, которые мне нужно достичь.
Возможно ли это? Если да, как мы можем это сделать?
Проверьте «Tortoise & Hare», который должен сделать это: http://en.wikipedia.org/wiki/Cycle_detection#Tortoise_and_hare – alk
Однако, круг не necessarly необходимо включить голова. – alk
сделать 2 проверки на итерацию (ручная размотка a.k.a.) – technosaurus