Java API имеет метод для этого, который завершается в O (n): Collections.reverse(List<?> list)
.Предполагая, что это домашнее задание, вы должны реализовать это самостоятельно, но в реальной жизни вы бы использовали библиотечную функцию.
В качестве альтернативы, вы можете создать обратный декоратор, который делает инверсию O (1).Ниже приведен пример концепции.
public class ReversedLinkedList<T> extends LinkedList<T> {
private final LinkedList<T> list;
public ReversedLinkedList(LinkedList<T> list) {
this.list = list;
}
public Iterator<T> descendingIterator() {
return list.iterator();
}
public Iterator<T> iterator() {
return list.descendingIterator();
}
public T get(int index) {
int actualIndex = list.size() - index - 1;
list.get(actualIndex);
}
// Etc.
}
Обратите внимание, что обычно (всегда?) Плохая форма - заставлять декоратор расширять конкретный класс.В идеале вы должны реализовать открытый интерфейс и принять параметр конструктора в качестве экземпляра открытого интерфейса.Приведенный выше пример предназначен исключительно для иллюстрации, поскольку в LinkedList реализовано множество интерфейсов (например, «Удаление очереди», «Список» и т. Д.).
Кроме того, вставьте сюда типичный комментарий «Преждевременная оптимизация - это зло» - вам нужно толькосоздайте этот перевернутый класс dequeue в реальной жизни, если ваш список был узким местом.