Мне было дано домашнее задание Введение в алгоритмы 11.1-3
, которое выглядит следующим образом:
Предложите, как реализовать таблицу прямого доступа, в которой ключи сохраненных элементов не обязательно должны быть различны, а элементы могут иметь спутниковые данные. Все три словарных операции (Insert, Delete и Search) должны выполняться в O (1) раз. Не забывайте, что Delete принимает в качестве аргумента указатель на объект, который нужно удалить, а не ключ.
Ну, вставка не проблема, поскольку это просто означает создание связанного списка в соответствующем месте в таблице (если оно еще не существует) и добавление к нему элемента. Поиск, которому дается ключ, может возвращать любой из элементов, соответствующих ключу, поэтому просто означает, что нам нужно вернуть головку списка соответствия в таблице.
Моя проблема заключается в операции Delete. Если я модифицирую объект, чтобы добавить к нему указатель на его node в связанном списке, тогда я могу удалить его в O (1), но я не уверен, что мне разрешено изменять объект. Есть ли способ сделать это без изменения данного объекта?