Помимо проблемы с currentNode->next = nodToDelete->next;
и отрицательными позициями, вы смешиваете свой интерфейс и свою логику.По возможности, вы должны разделить их.
Отправка чего-либо в пользовательский интерфейс - это способ сообщить о прогрессе;является ли пользовательский интерфейс командной строкой, браузером или динамиком.В пределах deleteNode пустой список или позиция, которая находится за пределами границ, не является прогрессом.Последовательность обоих одинакова с успехом - все готово.Если вы хотите, чтобы о сбое сообщалось, это должно быть сделано там, где это может привести к отдельной последовательности ... т.е. к вызывающей стороне.Кроме того, смешивая в пользовательском интерфейсе, вы вводите ненужные зависимости и ошибки (что, если в printf есть ошибка, ВАША функция будет аварийно завершать работу, когда в этом нет необходимости).Если ваша функция возвращает определенный результат, вызывающая сторона может решить, если / как сообщить об этом результате, включая успех (ваша функция в настоящее время не делает этого, и вызывающая сторона не может определить разницу между успехом или неудачей).