Dubbio su intersezione di due liste

di il
8 risposte

Dubbio su intersezione di due liste

Salve, non capisco quale sia il giusto ragionamento per creare una lista contenente solamente gli elementi che sono presenti in entrambe le liste argomento della funzione.
Insert è una funzione che inserisce la stringa in ordine nella lista ma non ha importanza adesso l' ordine perchè vorrei capire il ragionamento che c'è dietro alla funzione che fa questa intersezione.

list intersect(list& l1, list& l2)
{
 lList i = nullptr;
 
 for (l1 == nullptr; l1 != nullptr; l1 = l1->next){
  while (l2 != nullptr){
   if (l1->str == l2->str) insert(i, l1->str);
   l2 = l2->next;
  }
 }
 return i;
}

8 Risposte

  • Re: Dubbio su intersezione di due liste

    L'hai fatta tu questa funzione 'intersect'? Perché secondo me ha più di un baco: quando il while interno finisce (se mai ci arriva) nessuno fa ripartire l2 dalla 'testa', quindi la tua funzione al massimo confronta il primo elemento di l1 con l2 una volta, poi gira a vuoto fino al termine del for.
  • Re: Dubbio su intersezione di due liste

    Al netto di alcuni errori, la funzione dovrebbe fare questo: per ogni elemento della prima lista (ciclo for), ne cerca uno uguale nella seconda (ciclo while) e quando li trova li inserisce nella terza (i).
  • Re: Dubbio su intersezione di due liste

    Ok grazie ho provato a far ripartire l2 dalla testa ogni volta ma è uguale a prima, non capisco...
    
    ordList intersect(list& l1, list& l2)
    {
     ordList i = nullptr;
     
     for (l1 = nullptr; l1 != nullptr; l1 = l1->next){
      for (l2 = nullptr; l2 != nullptr; l2 = l2->next){
       if (l1->str == l2->str) insert(i, l1->str);
      }
     }
     return i;
    }
    
    
    
  • Re: Dubbio su intersezione di due liste

    Ho risolto...
    
    ordList intersect(list& l1, list& l2)
    {
     ordList i = nullptr;
     list curr1 = l1;
     list curr2 = l2;
     for (curr1 = l1; curr1 != nullptr; curr1 = curr1->next){
      for (curr2 = l2; curr2 != nullptr; curr2 = curr2->next){
       if (curr1->str == curr2->str) insert(i, curr1->str);
      }
     }
     return i;
    }
    
    Grazie dei suggerimenti
  • Re: Dubbio su intersezione di due liste

    Nelle altre due discussioni in cui ti ho recentemente risposto mi hai ignorato, ci riprovo:

    - puoi anche evitare di passare i parametri per riferimento;
    - l1 e l2 possono presentare elementi che si ripetono?
    - l1 e l2 sono liste ordinate?
  • Re: Dubbio su intersezione di due liste

    Si le due liste possono anche essere ordinate ed avere elementi che si ripetono.
  • Re: Dubbio su intersezione di due liste

    Nippolo ha scritto:


    Nelle altre due discussioni in cui ti ho recentemente risposto mi hai ignorato, ci riprovo:

    - puoi anche evitare di passare i parametri per riferimento;
    - l1 e l2 possono presentare elementi che si ripetono?
    - l1 e l2 sono liste ordinate?
    Grazie per avermelo fatto notare è che non sono espertissimo e non capisco velocemente quando va usato il passaggio per riferimento...
  • Re: Dubbio su intersezione di due liste

    SuperManPC ha scritto:


    Si le due liste possono anche essere ordinate ed avere elementi che si ripetono.
    Se è solo una possibilità quella che l1 e l2 siano ordinate, va bene così, ma in caso contrario il processo di intersezione può essere velocizzato.

    Riguardo al fatto che l1 può avere elementi che si ripetono, dovresti tenerne conto se vuoi che lo stesso elemento non si ripeta anche nella lista intersezione.
Devi accedere o registrarti per scrivere nel forum
8 risposte