Планета гаджетов / технологий
Задача обычно формулируется так: имеется указатель на начало списка и необходимо найти середину связного списка (в общем случае – произвольный элемент номер n).
В информатике, связный список — структура данных, состоящая из узлов, каждый из которых содержит как собственные данные, так и одну или две ссылки («связки») на следующий и/или предыдущий узел списка. Принципиальным преимуществом перед массивом является структурная гибкость: порядок элементов связного списка может не совпадать с порядком расположения элементов данных в памяти компьютера, а порядок обхода списка всегда явно задаётся его внутренними связями.
Достоинства связных списков:
Недостатки
Недостатки связных списков вытекают из их главного свойства — последовательного доступа к данным:
Приступая к задаче вы, вероятно, начнете с простого решения, в котором вы пройдете по всему связанному списку до конца, чтобы найти конец, а вторым проходом найти требуемую середину.
После этого ответа интервьюер наверняка попросит вас найти средний элемент за один проход.
Понадобятся два указателя: P1 и P2. В итерации сдвигаем указатель P1 на два элемента, а P2 на один. К моменту когда P1 достигнет конца списка (только нужно проверять, чтобы он не вышел за пределы, но это зависит от реализации), P2 будет указывать на середину.
Нужно взять два указателя на голову списка, первым отсчитать n элементов с начала списка, далее взять второй указатель на голову списка и двигать далее их уже одновременно, пока первый не достигнет конца. Тогда второй указатель будет указывать на n-й элемент с конца.