Ok, forse sono fuso ma non ne vengo a capo
sto cercando di implementare il getatindex e il deleteatindex nella queue
dato che secondo la mia prof. devo estrarre via via i nodi, per poter arrivare a quella posizione, ho pensato
"bene, posso estrarli e rimetterli in coda, arrivato a quello che mi interessa lo tiro fuori, e continuo il ciclo, appoggiandomi al size()-1"
il problema è che mi fa un giro in più e non ne vengo fuori
premetto che sto usando un unico "puntatore" che punta alla coda della queue, sempre secondo quanto dice la prof
public void delete(int index)
{
if (index < 0)
throw new IndexOutOfBoundsException("non puoi inserire un numero negativo come indice");
else if(isEmpty())
throw new EmptyStackException();
else if (index == 0)
{
Node<E> tmp = top;
while(tmp.getLink().getLink() != null)
tmp = tmp.getLink();
tmp.setLink(null);
}
else
{
if(size()-1 >= index)
{
//Stack<E> s = new Stack<>();
int size = size();
int count = 0;
while(size > 0)
{
System.out.println("size = " + size + " count = " + count + " index = " + index);
if(count == index)
{
System.out.println("size = " + size + " count = " + count + " index = " + index);
Node<E> tmp = get();
tmp.setLink(null);
}
add(get());
count++;
size--;
}
}
else
throw new IndexOutOfBoundsException("pila di grandezza inferiore all'indice inserito");
}
}
ho provato un po' di tutto.
la soluzione più semplice, che non vorrei fare amenochè non mi venga richiesta, sarebbe implementare una seconda coda temporanea dove infilare i nodi che estraggo per poi ributtarli in quella in uso, ma mi sembra uno spreco di risorse.
copio anche i codici dell'add
public void add(Node<E> n)
{
if(isEmpty())
top = n;
else
{
n.setLink(top);
top = n;
}
}
e del get
public Node<E> get()
{
if(isEmpty())
throw new EmptyStackException();
else
{
Node<E> tmp = top;
Node<E> pointer;
while(tmp.getLink().getLink() != null)
{
tmp = tmp.getLink();
}
pointer = tmp.getLink();
pointer.setLink(null);
tmp.setLink(null);
return pointer;
}
}
potranno sembrare contorti ma funzionano, se avete idee migliori, son aperto a suggerimenti