Visualizzazione dei risultati da 1 a 6 su 6

Visualizzazione discussione

  1. #2
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Secondo me ci sono due problemi:

    1. Se vuoi cancellare un elemento della lista, ti serve oltre al puntatore all'elemento corrente anche quello a precedente (a meno che non fai una lista doppiamente linkata). in questo modo la cancellazione diventa:
    codice:
    prev->next = current->next;
    free(current); // oppure lo aggiungi alla nuova lista
    2.Quando trovi l'elemento fai un doppio passo avanti

    codice:
    if(strcmp(...)){
        ...
       *l = (*l)->next; // vai al prossimo
        free(q);
    }
    *l = (*l)->next; // vai al prossimo (del prossimo)
    Come vedi nel caso trovi il nodo fai due volte *l = (*l)->next;. Usando il puntatore prev, ti basta assegnarlo a *l
    codice:
    if(strcmp(...)){
        ...
       *l = prev; // vai al precendente
        free(q);
    }
    *l = (*l)->next; // vai al prossimo
    PS: Ovviamente devi gestire il caso in cui devi cancellare la testa della lista
    Ultima modifica di boots; 12-01-2017 a 14:44

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.