Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [java] cancellare elemento lista

    salve a tutti,

    sto cercando di creare un metodo che cancelli un elemento di una lista nella posizione da me indicata.
    La lista è composta da metodi e un campo testa di tipo Node; la classe Node è invece composta da un campo cargo di tipo int e un campo next di tipo Node, più svariati metodi compresi setters e getters.

    Ho scritto un metodo che serve a cancellare un determinato Node nella posizione n-esima:
    codice:
        // cancellazione del nodo in posizione n
        public boolean ErasePosition( int pos )
        {
            boolean trovato = false;
            // scorro gli elementi
            if( testa == null ) // caso lista vuota
            {    trovato = false;
                this.PrintList();
            }
            else
            {    if( pos == 1 ) // caso primo elemento
                {    testa = testa.GetNext();
                    trovato = true;
                    this.PrintList();
                } else
                    if( pos > 1 )
                    {    Node previous = testa;
                        Node temp = testa.GetNext();
                        while( temp != null && pos > 2 )
                        {    pos--;
                            previous = temp;
                            temp = temp.GetNext();
                        }
                        previous.SetNext( temp.GetNext() );
                        this.PrintList();
                        trovato = true;
                    }
            }return trovato;
        }
    sul libro, su questo forum e su internet in generale ho trovato metodi più veloci del mio, ma non riesco ad applicarli al mio caso. Mi spiego meglio: mi sembra di aver scritto praticamente l'essenziale, qualcuno è in grado di spiegarmi se potevo fare un qualcosa di molto più semplice e veloce?
    grazie in anticipo

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da mastodilu Visualizza il messaggio
    mi sembra di aver scritto praticamente l'essenziale
    Il metodo che hai postato qui è abbastanza fumoso .... e ti assicuro che non è certo "essenziale" ... si può fare con meno codice. Basta solo ragionare un pochino (e l'unico caso particolare è per il primo elemento, oltre a lista vuota ovviamente).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Il metodo che hai postato qui è abbastanza fumoso .... e ti assicuro che non è certo "essenziale" ... si può fare con meno codice. Basta solo ragionare un pochino (e l'unico caso particolare è per il primo elemento, oltre a lista vuota ovviamente).
    infatti, ma questa è l'unica soluzione che ho trovato... intendi che potrei per esempio evitare di utilizzare temp? perchè quella è l'unico miglioramento che mi è venuto in mente

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Non testato e scritto "al volo":

    codice:
    public void eliminaNodo(int indice) {
        if (testa != null) {
            if (indice == 0) {
                testa = testa.getNext();
            } else {
                Nodo prec = testa;            // 1° elemento (indice 0)
                Nodo corr = testa.getNext();  // 2° elemento (indice 1)
                
                while (corr != null && --indice > 0) {
                    prec = corr;
                    corr = corr.getNext();
                }
                
                if (corr != null) {
                    prec.setNext(corr.getNext());
                }
            }
        }
    }

    Ovviamente presuppone:
    - il metodo eliminaNodo in una classe con campo 'testa' di tipo Nodo.
    - Nodo con metodi getNext/setNext.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    credo di aver capito, grazie!

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.