Suggerimenti per eliminare la prima occorrenza in una lista c++

di il
5 risposte

Suggerimenti per eliminare la prima occorrenza in una lista c++

Buongiorno, vorrei realizzare una funzione in c++ per eliminare la prima occorrenza di una stringa in una lista. So come eliminare un elemento specifico della lista data la sua posizione tramite indice oppure tramite il suo nome. Il problema sorge con il doppio ciclo while per trovare le occorrenze, qual'è l' idea qua? Cioè è simile al ciclo nidificato come nei vettori o no? Qualcuno potrebbe darmi qualche suggerimento? Grazie.

5 Risposte

  • Re: Suggerimenti per eliminare la prima occorrenza in una lista c++

    Per ora ho scritto questo...
    
    void deleteFirstOccurrence(list& l)
    {
     cell *cur;
     cell *cur1;
     cell *prev;
     for (cur = l; cur != nullptr; cur = cur->next)
     {
      prev = cur;
       for (cur1 = l; cur1 != nullptr && cur1->str != cur->str; cur1 = cur1->next){}
        if (cur1 == l) l = l->next;
        else 
         prev->next = cur->next;
        delete cur;
     }
    }
    
    Come vi sembra, molto lontano dalla soluzione?
  • Re: Suggerimenti per eliminare la prima occorrenza in una lista c++

    Non si è capito bene che cosa tu debba fare, in realtà
  • Re: Suggerimenti per eliminare la prima occorrenza in una lista c++

    Ah praticamente data la lista: a b b c c
    la funzione deve trasformarla in: a b c
  • Re: Suggerimenti per eliminare la prima occorrenza in una lista c++

    Qua ho provato ad usare la funzione per eliminare la prima occorrenza ma non permette alla print di stampare nulla, non capisco il motivo...
    
    #include <iostream>
    #include <string>
    struct cell{
     std::string str;
     cell *next;
    };
    typedef cell *list;
    void DeleteFirstOccurence(list& l)
    {
     cell *cur;
     cell *cur1;
     cell *prev;
     for (cur = l; cur != nullptr; cur = cur->next)
     {
      prev = cur;
       for (cur1 = l; cur1 != nullptr && cur1->str != cur->str; cur1 = cur1->next){}
        if (cur1 == l) l = l->next;
        else 
         prev->next = cur->next;
        delete cur;
     }
    }
    void InserisciInTesta(list& l, std::string s)
    {
      cell *aux = new cell;
      aux->str = s;
      aux->next = l;
      l = aux;
    }
    void print(list l)
    {
      cell *aux = l;
      while (aux != nullptr)
      {
       std::cout << aux->str << ' ';
       aux = aux->next;
      }
      std::cout << std::endl;
    }
    int main()
    {
     list l = nullptr;
     InserisciInTesta(l, "mela");
     InserisciInTesta(l, "mela");
     InserisciInTesta(l, "mela");
     InserisciInTesta(l, "pera");
     InserisciInTesta(l, "pera");
     InserisciInTesta(l, "arancia");
     DeleteFirstOccurence(l);
     print(l);
    }
    
    
    
    
    
    
    
    
    
    
  • Re: Suggerimenti per eliminare la prima occorrenza in una lista c++

    Quale output ti aspetteresti con l'ultimo codice che hai postato?

    P.S.
    Non c'è bisogno della variabile aux nella funzione print(), puoi usare direttamente l.
Devi accedere o registrarti per scrivere nel forum
5 risposte