Pila bifronte

di il
25 risposte

25 Risposte - Pagina 2

  • Re: Pila bifronte

    Ok ho risolto ..... mi hai illuminato bastava fare così :
    
       nodoDx.next = nodo;
       nodo.prev = nodoDx.prev;
       nodoDx= nodo;
    		
    Ora funziona !!!!!
    Grazie per l 'aiuto
  • Re: Pila bifronte

    stev809 ha scritto:


    
       nodo.prev = nodoDx.prev;
    		
    No! Perché così "salti" un nodo.
  • Re: Pila bifronte

    Con il ciclo for funzionava ma ora combinando aggiunte da sx con aggiunte da destra mi da NullPointerException ma non su
    
    nodo.prev = nodoDx.prev;
    
    ma su
    
    nodoDx.next = nodo;
    
  • Re: Pila bifronte

    Scusa ragionando a parole
    -ho la lista
    -ho un nuovo nodo
    -la lista ha un nodo fittizio alla coda
    -Collego la lista al nuovo nodo tramite il nodo fittizio (nodoDx.next = nodo)
    -poi collego il nodo alla lista tramite il nodo fittizio (nodo.prev = nodoDx) non come ho fatto prima anche se messo in un ciclo funziona , e funziona anche così
    -in ultimo faccio diventare il nuovo nodo l 'ultimo nodo della lista (nodoDx = nodo)

    Cosa manca? perchè mi lancia l eccezione se punta al nuovo nodo?
  • Re: Pila bifronte

    stev809 ha scritto:


    Scusa ragionando a parole
    -ho la lista
    -ho un nuovo nodo
    -la lista ha un nodo fittizio alla coda
    -Collego la lista al nuovo nodo tramite il nodo fittizio (nodoDx.next = nodo)
    -poi collego il nodo alla lista tramite il nodo fittizio (nodo.prev = nodoDx) non come ho fatto prima anche se messo in un ciclo funziona , e funziona anche così
    -in ultimo faccio diventare il nuovo nodo l 'ultimo nodo della lista (nodoDx = nodo)

    Cosa manca? perchè mi lancia l eccezione se punta al nuovo nodo?
    Il addDx "a parole" (ignoriamo il caso di lista vuota che è BANALE ... è l'altro ramo di un "if") è:

    a) Hai un ultimo nodo attuale puntato da nodoDx
    b) Hai un nuovo nodo

    Quindi in ordine:
    1) Il next del nodo referenziato da nodoDx deve puntare a nodo
    2) Il prev di nodo deve puntare al nodo referenziato da nodoDx
    3) nodoDx deve ora corrispondere a nodo

    (1 e 2 li puoi scambiare senza alterare il funzionamento)

    Il addSx è similare ma "speculare".
  • Re: Pila bifronte

    Équello che ho fatto io qui no ???
    
                nodoDx.next = nodo;
    	    nodo.prev= nodoDx;
                nodoDx= nodo;
    
    ma mi lancia un eccezione
    perchè ?
  • Re: Pila bifronte

    Ora funziona ... almeno con le prove che ho fatto
  • Re: Pila bifronte

    Ora ho un altro quesito ...Come faccio a rimuovere da destra???.... pensavo bastasse porre nodoDx = nodoDx.prev ;
    ma a qaunto pare non funziona.
    Per rimuovere a sx ho usato questo metodo :
    
    public void delSx(){
    		if(this.eVuota()){
    			System.out.print("Non ci sono elementi da eliminare");
    		}else if ((nodoSx == nodoDx)&& nodoSx!= null){
    			nodoSx= nodoDx = null;
    			System.out.println("ora la lista è vuota");
    		}else{
    			nodoSx =nodoSx.next;
    		}
    		contatore--;
    	}
    funziona anche se quando la lista dovrebbe essere vuota non stampa il messaggio preposto ma lo stampa alla cancellazione successiva
    come mai ?
  • Re: Pila bifronte

    stev809 ha scritto:


    Ora ho un altro quesito ...Come faccio a rimuovere da destra???.... pensavo bastasse porre nodoDx = nodoDx.prev ;
    ma a qaunto pare non funziona
    No, non basta. Ripeto il suggerimento detto prima: fai lo "schemino" in cui tracci i collegamenti tra i nodi. Ti sarà molto più evidente cosa fare.
  • Re: Pila bifronte

    Ok devo puntare nodoDx.next a null giusto ?
  • Re: Pila bifronte

    Cmq ho risolto si puo chiudere
Devi accedere o registrarti per scrivere nel forum
25 risposte