Я ищу метод, который меняет один и тот же экземпляр данного списка, с O (1) дополнительным пространством и временем O (n).
это не HW, и я не ищу какой-нибудь библиотечный метод для выполнения этой работы для меня, поскольку это только упражнение для меня и из чистого любопытства.
любые идеи, как это сделать с O (1) дополнительным пространством и временем O (n)? (и, если возможно, без отражения)?
Подпись public <T> void reverse(List<T> list)
.
(*) предположим, что get() в голову и хвост списка O (1), но до середины O (n).
Я придумал рекурсивное решение, но это O (n) пространство, O (n) время
public <T> void reverseAux(List<T> list,int size) {
if (size == 0) return;
T elem = list.remove(size-1);
reverseAux(list,size-1);
list.add(0,elem);
}
public <T> void reverse(List<T> list) {
reverseAux(list, list.size());
}
EDIT: Я ищу Java-решение, для List<T>
, только предположение о реализации - это время доступа O (1) для головы и хвоста и использование интерфейса List<T>
.