Java odwracanie listy wiązanej w czasie stałym

0

Jak odwrócić elementy w liście dwustronnej dwukierunkowej z głową w czasie stałym?

0

Niedasie.

Ew. możesz sobie zwrócić widok, który iteruje od końca.

0

Przy odpowiednich założeniach da się. Np jeśli ustalimy że każdy węzeł listy ma dwa wskaźniki, ale nie jest na stałe określone w którą stronę prowadzą. Jeśli kierunek jest ustalany na podstawie wcześniej odwiedzonego węzła, to następnik to ten który nie jest poprzednikiem :]

0

Da się i nawet na DevCrowd o tym z kimś gadałem w kuluarach. Co prawda trzeba się nakombinować, ale tylko trochę. Istota kodu:

class Entry<T>{
    final T value;
    Entry<T> neighbor1;
    Entry<T> neighbor2;
    Entry(T value){
        this.value = value;
    }
    //... logika dodawania sąsiadów
   // i magia
   Entry<T> next(boolean direction){
     return direction?neighbor1:neighbor2;
   }
}

Problemy, które mogą się wydarzyć:

  1. synchronizacja
  2. zmiana kierunku gdy działa iterator, a ten powinien dostać tak naprawdę:
public Iterator<T> iterator(){
    return new InternalIteratorImpl(this.first(), direction);
}

gdzie first zwraca pierwszy element w liście, a direction jest sterowane np. za pomocą metody reverse.

W liście siedzi aktualny kierunek. Do iteratora podajemy "migawkę" kierunku.

1 użytkowników online, w tym zalogowanych: 0, gości: 1