как перевернуть список с O (1) пробелом и O (n) временем?

Я ищу метод, который меняет тот же экземпляр данного списка, с дополнительным пространством O (1) и Вовремя.
это не HW, и я ищу какой-нибудь библиотечный метод для выполнения этой работы, так как это всего лишь упражнение для меня и из чистого любопытства.

есть идеи, как это сделать с дополнительным пространством O (1) и временем O (n)? (и, если возможно, без размышлений)?
подпись public void reverse (List 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 , единственное предположение о реализации - время доступа O (1) для заголовка и хвоста и использование интерфейса List .

15
задан Paŭlo Ebermann 12 May 2011 в 23:53
поделиться