Этот более ранний вопрос рассказывает о выполнении бинарного поиска по двусвязному списку в O (n) времени. Алгоритм в этом ответе работает следующим образом:
- Перейдите в середину списка, чтобы выполнить первое сравнение.
- Если он равен элементу, который мы ищем, мы закончили.
- Если это больше, чем элемент, который мы ищем, пройдите назад на полпути к началу и повторите.
- Если он меньше, чем тот элемент, который мы ищем, пройдите вперед на полпути к началу и повторите.
Это хорошо работает для двусвязного списка, поскольку он может перемещаться как вперед, так и назад, но этот алгоритм не будет работать в односвязном списке.
Можно ли выполнить бинарный поиск во времени O (n) в односвязном списке, а не в двусвязном списке?