+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 2 su 2

Discussione: [C++] Eliminazione da lista

  1. #1
    Poel non è in linea Novello
    Post
    1

    Exclamation [C++] Eliminazione da lista

    salve, non riesco a capire perchè la mia procedura per l' eliminazione di un elemento dalla lista non va...

    codice:
    void search(L l){
         int info;
         cout<<"Put here the number you are looking for deleting : \n";
         cin>>info;
         while (l!=0){              //scorro tutta la lista fin quando non trovo l'elemento cercato
               if (info==l->num)
               deleteItem(l);  /quando lo trovo parte la procedura di eliminazione
               l=l->next;
               
               }
         }
    
    void deleteItem(L&l){
       
                     L aux = l;  // aux è un puntatore alla struttura che costituisce il nodo della lista
    		l = l->next;
    		delete aux;
                  
    }

  2. #2
    L'avatar di bottomap
    bottomap non è in linea Moderatore Globale
    Post
    4,130
    Ciao,

    Per il semplice motivo che passi un riferimento diretto al nodo N che vuoi cancellare.

    In primo luogo se vuoi eliminare un nodo N(x) dalla lista dovrai modificare il next del padre di tale elemento N(x-1) in modo che punti all'eventuale figlio dell'elemento N(x+1). Il dato che passi alla funzione di cancellazione è quindi in buona sostanza errato.

    Inoltre, e questo a scanso di ulteriori futuri equivoci, quando passi qualcosa ad una funzione, la funzione riceve una copia di quello che hai passato. Se esegui l=l->next all'interno della fuzione, il valore di l viene modificato all'interno della funzione, ma non viene magicamente modificato fuori dalla stessa (in effetti il parametro potrebbe chiamarsi - anzi sarebbe proprio opportuno che si chiamasse - in maniera differente dalla l presente nel chiamante).

    Un'ultima indicazione utile è quella di non lesinare, ne' sui nomi dei tipi, ne' sui nomi delle variabili... quelle l ed L disseminate in giro ti risparmiano qualche battuta ma diventano molto velocemente scritture illeggibili, in primo luogo da terzi e, alla lunga, anche da te.


    Venite a farmi un saluto su http://www.bottomap.com/

    - Come porre domande in modo intelligente
    - Hai mai dato un'occhiata al
    Regolamento del Forum? Se la risposta è no, sarebbe proprio l'ora di farlo...
    - Il Crossposting è vietato dalla Netiquette.

    "Solo Puffin ti darà forza e grinta a volontà" - Charlie O'Brian
    "I gatti sono animali verso cui ho il massimo rispetto. I gatti e i non conformisti mi sembrano davvero i soli esseri in questo mondo che abbiano una coscienza pratica e attiva" - Jerome K. Jerome
    "Dun Dun DUNNN!" - Capitan Caos
    (per chiunque se lo fosse mai chiesto, il nick Bottomap è volutamente sgrammaticato)

+ Rispondi al Thread

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi