KuroKami69 ha scritto:
public int size()
{
int size = 0;
if(isEmpty())
return 0;
else
{
while(head != null)
{
head = head.getLink();
size++;
}
}
return size;
}
dovrebbe andare meglio mmh
No affatto. Innanzitutto il isEmpty() non servirebbe. Basta solo il ciclo come ho mostrato io per la iterazione.
Ma c'è un dettaglio importante! NON devi toccare (=modificare) il head.
head = head.getLink();
Il size() non deve fare alcuna modifica alla collezione, se assegni a head vai a "rovinare" completamente la lista dei nodi.
KuroKami69 ha scritto:
mi sono dilettato anche con l'extract at
public Node<E> extract(int index)
{
if(isEmpty())
throw new EmptyStackException();
else
{
Node<E> tmp = head;
while (index > 1)
{
tmp = tmp.getLink();
index--;
}
tmp.setLink(null);
return tmp;
}
}
anche se ora come ora ho seri problemi a immaginarmi come linkare i 2 nodi ai lati di quello che tiro fuori
Eh eh .... se vuoi estrarre (=togliere) il nodo di indice
index (partendo da head) c'è da ragionare un pochino.
Dai, anche se è tardi e vorrei andare a dormire .. un bel mini grafico:
head----> nodo0----> nodo1----> nodo2----> nodo3--null
Se si invoca extract(0) dovrebbe rimuovere nodo0.
Se si invoca extract(1) dovrebbe rimuovere nodo1.
Se si invoca extract(2) dovrebbe rimuovere nodo2.
ecc...
Il caso particolare è: con extract(0) va modificato il head, che non è il "next" di un nodo. Insomma è un caso particolare.
Con index > 0 invece va modificato il "next" di un nodo.