|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Nov 2005
Città: Genova
Messaggi: 75
|
(java) rimozione nodo
Mentre mi e' chiara la prima parte che controlla che l'oggetto x non sia null , la coda non sia vuota e se ce un solo oggetto;
la seconda parte dopo il ciclo for non mi e' altrettanto chiara. Qualcuno puo' spiegarmi sommariamente i passaggi? Grazie Codice:
public boolean remove(Object x) {
if (x==null) throw new IllegalArgumentException();
if (isEmpty()) return false;
if (x.equals(first.element)){
if (first==last)
last=null;
first=first.next;
mod++;
return true;
}
for(Node i=first; i.next!=null; i = i.next){
if(x.equals(i.next.element)){
if(i.next==last)
last=i;
i.next=i.next.next;
mod++;
return true;
}
}
return false;}
Ultima modifica di aduri : 29-10-2006 alle 22:20. Motivo: Titolo errato |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Dec 2005
Città: Ahimè..Bs ----------------------------------- Messaggi tot: 1000+
Messaggi: 772
|
hai riportato un pezzo di codice con alcune lacune a occhio e croce...
in particolare non si spiega come mai ci sia questo mod++ che poi non viene utilizzato...
__________________
11/2006-Inspiron6400 -t7200|2GB@533MHz|S-ATA 80gb@7200rpm|Ati X1400|9cell Battery||garanzia 3 anni On-Site NBD ex: Toshiba M30-154 (PERCHE' NON COMPRARE TOSHIBA..LEGGI QUI) + P4 2.8@3,2GHz 1MB L2, Gigabyte 915p-duo,1GB DDR400 DualCh, gF 6600gt 128MB GDDR3 + Canon Ixus50 + Creative Muvo^2 1.5GB |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Il premio per aver scritto quella routine sono 5 anni nelle patrie galere ma dovrei controllare per esserne certo.
Credo che la seguente sia un'interpretazione corretta anche se per esserne certi occorrerebbe interrogare un etruscologo. Codice:
public boolean remove(Object x) {
if (x==null) throw new IllegalArgumentException();
if (isEmpty()) return false;
if (x.equals(first.element)){
if (first==last)
last=null;
first=first.next;
mod++;
return true;
}
/* Se non si sia verificata una delle peraltro
incomprensibilmente esposte condizioni di cui sopra...*/
/* I nodi scanditi sono i.next e non i, come potrebbe pensare uno
che non avesse escluso grazie alle confusione precedente
il primo nodo. Facciamo finta che i.next sia, tutto incluso,
il nodo corrente */
for(Node i=first; i.next!=null; i = i.next){
/* Se il valore cercato equivale al contenuto del
nodo corrente, allora il nodo corrente, i.next è il
nodo da rimuovere */
if(x.equals(i.next.element)) {
/* se il nodo da rimuovere è l'ultimo, l'ultimo
diventa il nodo precedente a quello che contiene
il valore cercato. Il nodo precedente è i (il nodo
correntemente valutato, infatti, è i.next) */
if(i.next==last) last=i;
/* Il nodo corrente viene eliminato. Per farlo, il nodo
precedente di quello che contiene il valore cercato (i)
viene collecato (i.next =) al nodo successivo a quello
che contiene il valore cercato (i.next.next) */
i.next=i.next.next;
/* Non mi capacito del significato di questo mod */
mod++;
return true;
}
}
return false;
}
|
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Nov 2005
Città: Genova
Messaggi: 75
|
Grazie delle delucidazioni.
Per cio' che riguarda la variabile mod (modifiche) e' un contatore che viene incrementato ogni volta che viene usato un metodo remove(), add() e clear() per evitare che modifiche concorrenti possano interferire col comportamento degli iteratori. Il codice e' poco chiaro perche' e' uno stralcio di codice ho tralasciato il resto per questioni di spazio. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:14.



















