Это невозможно при использовании простого односвязного списка.
Эскизное доказательство: чтобы исследовать последний узел односвязного списка, мы должны выполнить n-1
операции следования за "следующим" указателем [доказательство по индукции о том, что существует только одна ссылка на k+1
th узел, и он находится в k
th узле, и для его выполнения требуется операция]. Для определенных входных данных необходимо проверить последний узел (в частности, если искомый элемент равен или превышает его значение). Следовательно, для определенных входов требуемое время пропорционально n
.
Вам нужно больше времени или другая структура данных.
Обратите внимание, что вы можете сделать это в O (log n) Сравнение с двоичным поиском. Это займет больше времени , чем это, так что этот факт представляет интерес, только если сравнение намного дороже, чем обход списка.