Site icon AppTractor

Задачи с собеседований: найти середину связного списка

Задача обычно формулируется так: имеется указатель на начало списка и необходимо найти середину связного списка (в общем случае — произвольный элемент номер n).

В информатике, связный список — структура данных, состоящая из узлов, каждый из которых содержит как собственные данные, так и одну или две ссылки («связки») на следующий и/или предыдущий узел списка. Принципиальным преимуществом перед массивом является структурная гибкость: порядок элементов связного списка может не совпадать с порядком расположения элементов данных в памяти компьютера, а порядок обхода списка всегда явно задаётся его внутренними связями.

Достоинства связных списков:

Недостатки

Недостатки связных списков вытекают из их главного свойства — последовательного доступа к данным:

Простое решение

Приступая к задаче вы, вероятно, начнете с простого решения, в котором вы пройдете по всему связанному списку до конца, чтобы найти конец, а вторым проходом найти требуемую середину.

После этого ответа интервьюер наверняка попросит вас найти средний элемент за один проход.

Найти середину связного списка: сложное решение

Понадобятся два указателя: P1 и P2. В итерации сдвигаем указатель P1 на два элемента, а P2 на один. К моменту когда P1 достигнет конца списка (только нужно проверять, чтобы он не вышел за пределы, но это зависит от реализации), P2 будет указывать на середину.

Еще решение

Нужно взять два указателя на голову списка, первым отсчитать n элементов с начала списка, далее взять второй указатель на голову списка и двигать далее их уже одновременно, пока первый не достигнет конца. Тогда второй указатель будет указывать на n-й элемент с конца.

Exit mobile version