Trzymam pierwszy element listy (element bieżący) i potem sprawdzam po całej liście czy ten element ma jakieś duplikaty jeśli tak to usuwam duplikat i kontynuuje przeglądanie aż do końca listy potem zmieniam element bieżący o jeden itd...
Kod wydaje się próbować usuwać duplikaty, ale jego działanie nie zawsze będzie poprawnie W momencie usunięcia j-tego elementu, nie powinieneś przesuwać poprzedni na j, ponieważ teraz poprzedni i j wskazują na ten sam element, co może prowadzić do problemów.
Co ważne w takim podejściu twój kod nie uwzględnia usuwania duplikatów z pierwszego elementu, druga sprawa kod ma złożoność czasową O(n^2), co może być kosztowne dla dłuższych list.
Kolejna sprawa, że poo usunięciu elementu z listy, tworzysz tymczasowy wskaźnik tmp, ale nadal używasz wskaźników do elementów, które zostały już usunięte
Zakładając liste np. :
1 -> 1 -> 2 -> 2 -> 3