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

    [C] Problema eliminazione elemento da lista

    Ciao a tutti! Sono uno studente e sono registrato da poco nel forum.
    Ho un problema.
    Sto studiando C e, in un esercizio, mi viene chiesto di gentire una semplice rubrica telefonica, in grado di gestire 4 funzioni: 1- Aggiungi contatto; 2-Visualizza nome e numero associati; 3-Elimina contatto tramite nome; 4-Ordina rubrica per nome
    Sono rimasto bloccato con la terza funzione in quanto, se il contatto (quindi l'elemento) è l'ultimo della lista, questi non viene eliminato

    Vi posto qua il codice:
    https://gist.github.com/anonymous/e5...b3ffdff1bce1c7

    Grazie

  2. #2
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    Io la implementerei in modo diverso, visto che esistono tanti esempi online che potresti copiare, ti posto anche questo


    codice:
    List *DeletebyName(List *first, char a[100]){
    List *tmp, *first1=first;
    if (first!=NULL){
        // Caso primo nodo da eliminare perdo riferimento a inizio lista che viene elinato
        if (strcmp(a, first1->name)==0){
                tmp=first1;// salvo il puntatore al nodo da cancellare
                first1=first1->n; // scorro la lista, se è l'ultimo nodo first diviene null
                first=first1; // prino nodo della lista da restituire
                free(tmp);
                return (first);
            }
        while(first1!=NULL){
            if (strcmp(a, first1->name)==0){
                tmp=first1;// salvo il puntatore al nodo da cancellare
                first1=first1->n; // scorro la lista, se è l'ultimo nodo first diviene null
                free(tmp);
                return (first);
            }
            else{
            
                first1=first1->n;
            }
        } 
    }
    else{
        return 0;
    }
    
    
    
    
    
    
    return (first);
    }
    Ultima modifica di torn24; 22-08-2016 a 18:10
    Tecnologia

  3. #3
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    Ciao

    Leggendo oggi il post, mi sono accorto che l'esempio è errato, una correzione fondamentale.



    codice:
    List *DeletebyName(List *first, char a[100]){
    List *tmp, *first1=first;
    if (first!=NULL){
        // Caso primo nodo da eliminare perdo riferimento a inizio lista che viene elinato
        if (strcmp(a, first1->name)==0){
                tmp=first1;// salvo il puntatore al nodo da cancellare
                first1=first1->n; // scorro la lista, se è l'ultimo nodo first diviene null
                first=first1; // prino nodo della lista da restituire
                free(tmp);
                return (first);
            }
        while(first1->n!=NULL){
            if (strcmp(a, first1->n->name)==0){
                tmp=first1->n;// salvo il puntatore al nodo da cancellare
                first1->n=first1->n->n; // NON DEVO SCORRERE MA PASSARE AL SUCCESSIVO
               //SALTANDO IL NODO DA ELIMINARE
                free(tmp);
                return (first);
            }
            else{
            
                first1=first1->n;
            }
        } 
    }
    else{
        return 0;
    }
    Tecnologia

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 © 2024 vBulletin Solutions, Inc. All rights reserved.