Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    205

    [java]cancella elemento da una lista

    codice:
        public void eliminaPari(){
    	ListElem cursore = first;
    	
    	while(cursore != null) {
    	        if(first.getDato() %2==0) {
    	 		first = first.getNext();
    	 	}	
    	 	
    		if(cursore.getDato() %2==0) {//non cancella
    			cursore = cursore.getNext();
    			cursore = cursore.getNext().getNext();
    		} 
    		cursore=cursore.getNext();
    	}
        }
    funziona perfettamente per i first ma gli altri elementi non me li cancella perchè? se l'ultimo numero è pari come devo gestirlo?

    Grazie

  2. #2
    nel codice ci sono un po' di errori.
    - la classe ListElem deve avere un metodo setNext() che ti permette di aggiornare il valore del riferimento all'elemento successivo
    - devi utilizzare un puntatore all'elemento precedente per evitare di perdere parti di lista durante la cancellazione
    - la cancellazione dell'ultimo elemento non ha bisogno di essere gestita separamente
    codice:
    public void eliminaPari()
    {
       ListElem cursore = first;
       ListElem prev = first;
       while(cursore != null)
       {
          if(cursore.getDato() %2==0)
          {
             if (cursore == first)
             {
                first = first.getNext();
                cursore = prev = first;
             }
             else
             {
                cursore = cursore.getNext();
                prev.setNext(cursore);
             }
          }	
          else
          {
             prev = cursore;
             cursore = cursore.getNext();
          }
       }
    }

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    205
    ottimo grazie! potresti spiegarmi prev non ho capito il suo utilizzo?

  4. #4
    supponiamo che il cursore sia posizionato al centro della lista su un elemento pari (quindi da cancellare).
    occorrerà cambiare il riferimento dell'elemento precedente per far si che punti all'elemento successivo a quello da cancellare. prev ti permette di agire sul campo next dell'elemento precedente.
    con un disegno sarebbe tutto più semplice

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    205
    grazie ottima risposta! adesso sto lavorando su un metodo che deve restituire una NUOVA lista che contiene solo gli elementi in posizione pari della lista data.

  6. #6
    se vuoi approfondire l'argimento puoi consultare questo articolo che analizza i diversi casi nel gestire un nodo in una lista concatenata Una lista concatenata in java
    http://www.simplesoft.it

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    205
    adesso sto lavorando su un metodo che deve restituire una NUOVA lista che contiene solo gli elementi in posizione pari della lista data.
    codice:
    public MiaLista senzaPosizioniPari(){
    	////////// INSERIRE il PROGRAMMA //////////////
        	ListElem cursore = first;
    	ListElem dato = new ListElem();
    	int pos=0;
    	
    	while(cursore != null){
    	pos++;
    	if(pos%2==0) {
    		dato.setDato(cursore.getDato());
    		dato.setNext(cursore.getNext());
    		cursore.setNext(dato);
    	}
    	cursore = cursore.getNext();
        }
    	return dato;
    	}
    qui il problema è sul valore di ritorno non ritornare dato che è un ListElem e non una MiaLista come richiesto!

  8. #8
    questo perchè all'interno del metodo devi creare una nuova lista MiaLista e non un solo nodo.
    codice:
     
    MiaLista soloPari = new MiaLista();
    e all'interno del ciclo, quando individui l'elemento da inserire farai una cosa del tipo
    codice:
     
    soloPari.addNode(cursore.getDato());
    ed infine
    codice:
     
    return soloPari;

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    205
    Ok! grazie!

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    205
    uso questo metodo
    codice:
        public void insert(int val) {
    
            ListElem elem = new ListElem();
            elem.setDato(val);
            elem.setNext(first);
    
            first = elem;
    
        }
    ma i miei numeri vengono inseriti al contrario come devo risolvere?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.