Sì è corretta, il principio è lo stesso. Tieni conto solo di un fatto che non riguarda l'algoritmo ma un aspetto "tecnico": questa condizione

codice:
                                          if ( (L1->dato!=L2->dato) || 
                                               (L1==NULL && L2!=NULL) || 
                                               (L2==NULL && L1!=NULL) )
può generare errori di accesso alla memoria per dereferenziazione di puntatori NULL. Infatti, la prima condizione della funzione, cioè

codice:
if (L1==NULL && L2== 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 if

codice:
                                          if ( (L1==NULL && L2!=NULL) || 
                                               (L2==NULL && L1!=NULL) ||
                                               (L1->dato!=L2->dato))
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.