Originariamente inviato da rubikk
Ciao a tutti, vi chiedo aiuto per tentare di capire dove sbaglio (per parafrasare una famosa canzone, la programmazione non sarà mai il mio mestiere

).
Premettendo che sto studiando Strutture Dati per un corso universitario, tra gli esercizi relativi alla queue c'è questo:
Scrivere la funzione
codice:
public static <E> void reverse(Queue<E> Q)
che inverte il contenuto della coda Q.
Ricordo che queue rappresenta una coda di tipo FIFO, in cui gli inserimenti avvengono in coda e le cancellazioni in testa, e che le operazioni consentite sono enqueue (inserimento in coda) e dequeue (estrazione dalla testa).
Problema: come ottengo l'inversione della coda? Avevo pensato a una cosa del genere:
codice:
public Queue<E> reverseQueue(Queue<E> coda) {
queue1 = new ArrayQueue<E>(capacity);
queue1 = (ArrayQueue<E>) coda;
while (!queue1.isEmpty())
queue2.enqueue(queue1.dequeue());
return queue2;}
ma la logica suggerisce che togliendo dal fondo e reinserendo in testa ottengo, alla fine, di nuovo la situazione di partenza. Qualche idea in proposito?
Lo step successivo invece sarebbe di fare la stessa operazione usando un metodo ricorsivo... e se qualcuno avesse consigli anche per questo sarebbe cosa graditissima!