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

di Anonimizzato28411 il
5 risposte
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

  • 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?
  • Non si è capito bene che cosa tu debba fare, in realtà
  • Ah praticamente data la lista: a b b c c
    la funzione deve trasformarla in: a b 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);
    }
    
    
    
    
    
    
    
    
    
    
  • 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