Stai facendo confusione a più livelli.
In primo luogo, stai mescolando di nuovo codice che contiene la logica del container dati (la lista) con codice per mostrare all'utente il suo contenuto, e le due funzioni dovrebbero essere ben distinte.
Inoltre, la linea grassettata non ha nessun senso, dato che stai cercando di assegnare a l2 un NULL, dato che nel codice subito sopra la lista passata è già stata scorsa fino alla fine. E anche se contenesse un valore sensato, non capisco perché assegnarlo alla prima lista (e peraltro questo avrebbe alcun effetto su lista2 all'esterno, dato che vai a modificare non ciò a cui punta quel puntatore, ma il puntatore stesso).
Poi, se vuoi fondere due liste, devi specificare in che lista vanno a finire tutti gli elementi: nella prima? Nella seconda? In una nuova? Sulla lista su cui è richiamato il metodo? E gli elementi delle liste passate devono continuare ad esistere indipendentemente o devono essere spostati nella nuova lista?
Infine, mi pare che la classe UnionL sia pensata male, dato che non modellizza una lista, ma un singolo elemento di essa. Una buona modellizzazione di una lista dovrebbe contenere una classe elemento solo al proprio interno, e non mostrare questi dettagli implementativi all'esterno; il concetto dovrebbe essere un po' come quello della classe coda su cui avevamo lavorato in passato.