Wydaje mi się, że pod koniec funkcji dodaj zamiast
head->pop = temp;
powinno być
temp->pop = element
ale nie testowałem tego.
Taka pobieżna analiza, możliwe, że coś zamieszałem. W twojej wersji lista już przy trzecim dodaniu jest niestabilna, gdyż element dodany w drugim dodaniu ma wciąż wskaźnik pop na head (powinien mieć na element). Sama zmiana head->pop w trzecim jeszcze nadpisze to samo (będzie poprawne, ale nie z algorytmu to wynika). W czwartym dodaniu head->pop już w złe miejsce wskazuje.