The issue seems to be your first case: current->getNextLink() == NULL
will evaluate to true for that last item in the list. So, when you process the last item, you effectively delete the entire list.
I assume this is meant to detect the first item in the list, change it to:
if (current->getNextLink() == NULL && current->getPreviousLink() == NULL)
or, alternatively, move it outside the loop and just use the first variable.