Capisco, invece io mi stavo cimentando nell'implementare una funzione ricorsiva che ricercasse nella lista 2 la sequenza ordinata che costituisce la lista 1... ed effettivamente è un po' più complicato rispetto a controllare l'appartenenza dei vari elementi di una lista all'altra.
Ipotizzando che la funzione completa sia:
int contenuto(nodo *p1, nodo *p2)
{
int trovato = 0;
while(p1 != NULL)
{
trovato = cerca(p2, p1->dato);
if(trovato == 1)
{
contenuto(p1->next, p2);
}
return trovato;
}
}
vorrei fare alcune considerazioni:
- il ciclo while è inutile e può essere sostituito da un semplice if. Infatti, vista la posizione del return, quel ciclo potrà avere al massimo una sola iterazione;
- sempre riguardo alla posizione del return... cosa ritorna la funzione nel caso in cui p1==NULL?
- in ogni caso il problema fondamentale è che la risposta che ti fornisce quella funzione si basa solo sul primo elemento di p1... per esempio il tuo codice mi dice che la lista {7 1 2} non appartiene alla lista {1 2 3 4 5}, mentre la lista {3 6 8} sì.
Bisogna quindi modificare un po' la funzione, sei d'accordo?