Sì è corretta, il principio è lo stesso. Tieni conto solo di un fatto che non riguarda l'algoritmo ma un aspetto "tecnico": questa condizione
può generare errori di accesso alla memoria per dereferenziazione di puntatori NULL. Infatti, la prima condizione della funzione, cioècodice:if ( (L1->dato!=L2->dato) || (L1==NULL && L2!=NULL) || (L2==NULL && L1!=NULL) )
esclude l'eventualità che L1 e L2 siano *entrambi* NULL, ma non è detto che almeno uno di loro non lo sia. Per questo, quando dopo vai ad accedere al campo "dato" di L1 e L2 nella prima condizione dell'if, se uno di questi due fosse effettivamente NULL il programma crasherebbe. Devi quindi posticipare la prima condizione del secondo ifcodice:if (L1==NULL && L2== NULL )
così se le prime due condizioni risultano false, avrai la garanzia che sia L1 che L2 siano diversi da NULL, quindi poi puoi dereferenziarli. Se invece una delle prime due condizioni risultasse vera, la terza non verrebbe proprio valutata perché sono in OR tra di loro, quindi in ogni caso non hai il problema del puntatore NULL.codice:if ( (L1==NULL && L2!=NULL) || (L2==NULL && L1!=NULL) || (L1->dato!=L2->dato))

Rispondi quotando