Я нашел этот код для печати среднего узла списка на C++, но я не понимаю код ... Кто-нибудь может мне это объяснить?Средний узел односвязного списка
Type& findMiddleNode()
{
int check = 0;
nodeType *current;
nodeType *mid;
current = first;
mid = first;
while (current != NULL)
{
current = current->link;
check = (check + 1) % 2;
if (check == 0)
mid = mid->link;
}
return mid->info;
}
PD: Этот код работает идеально, но я не понимаю! Кто-то поможет мне понять это. Благодаря!
Что вы не совсем поняли? Мы можем оказать лучшую помощь, если вы так скажете :) – Rakete1111
Идея состоит в том, чтобы иметь два указателя, которые пересекают список с разной скоростью, в два раза быстрее, чем другие. Быстрый указатель продвигается на каждой итерации, медленный указатель только на каждую итерацию. Когда быстрый указатель достигнет конца списка, медленный будет точно посередине. –
Я не понимаю функцию указателей тока и середины, а ток var. Я не понимаю процесс в цикле while –