Eliminazione primo elemento lista

di il
3 risposte

Eliminazione primo elemento lista

Ragazzi c'e qualkuno che gentilmente riesce a farmi capire perché questa funzione non riesce ad eliminare il primo elemento della lista, ma solo dal secondo in poi, e da ieri che la giro e rigiro ma non riesco a risolvere il problema....Grazie a chi mi aiuta
 void LISTALIB::Cancella(N e){
  Lista_Lib * t=n;
  Lista_Lib * prec=t;
  Lista_Lib * curr;
  bool trovato=false;
  while (t && !trovato) {
		if(strncmp(t->elem.Cognome,e,100)==0) {
        curr=t;
        t=t->next;
        prec->next=t;
        delete curr;
        trovato=true;
        }
   	    else{
   	    prec=t;
   	    t=t->next;
		}}
	if(!trovato){
    cout<<"non trovato"<<endl; }
};

3 Risposte

  • Re: Eliminazione primo elemento lista

    Ciao,
    ammetto che il tuo codice mi risulta piuttosto difficile da leggere, soprattutto a causa dei nomi delle variabili (chiamarle a, b, e, ... raramente è una buona idea).
    Comunque quello che di solito si fa con le liste è controllare a parte il primo elemento: quindi PRIMA controlli il primo elemento e POI, se non era quello che cercavi, passi agli altri con una serie di next dentro a un ciclo.

  • Re: Eliminazione primo elemento lista

    Scusami per la poca leggibilità del codice ma e solo una bozza per vedere se la funzione fa cio che voglio, cmq ti ringrazio lo stesso e credo di aver risolto con un altro approccio...alla fine ho fatto questo e sembra funzionare
    void LISTALIB::EliminaLibro(N e){
      Lista_Lib * t=n;
      Lista_Lib * prec=NULL;
      Lista_Lib * curr;
      bool trovato=false;
    if (strncmp(t->elem.Cognome,e,100)==0)
    {
    n=n->next;
    free (t);
    }
    else
    {
    while (t && !trovato)
    {
    if (strncmp(t->elem.Cognome,e,100)==0)
    {
    prec->next=t->next;
    free (t);
    trovato=true;
    }
    else
    {
    prec=t;
    t=t->next;
    }
    }
    }if(!trovato)
    cout<<"Libro non trovato"<<endl;
    }
  • Re: Eliminazione primo elemento lista

    D'accordo, se hai risolto allora tutto ok. Altrimenti per altri problemi siamo qui.

Devi accedere o registrarti per scrivere nel forum
3 risposte