1: этот
ReservationNode *nodeIn = head;
ReservationNode *CurrentNode = head->next;
не определен, если список пуст.
Вы можете просто вернуться, если он есть.
2: если узел не найден вэтот цикл:
while ((CurrentNode != NULL) && (CurrentNode->Name != name))
CurrentNode
будет нулевым после цикла, но вы идете прямо и безоговорочно разыменовываете его:
if (CurrentNode->Name != name){
Этот тест должен быть
if (CurrentNode == NULL){
3: Это
if (nodeIn == head){
CurrentNode = head->next;
CurrentNode = head;
delete nodeIn;
}
эквивалентно
if (nodeIn == head){
CurrentNode = head;
delete head;
}
, а затем head
указывает на узел, который вы только что уничтожили.
Это должно быть
if (nodeIn == head){
CurrentNode = head;
head = head->next;
delete CurrentNode;
}
Примечание: все становится намного проще, если вы отделяете взаимодействие пользователя с манипулированием данными.
Создайте элемент, который берет имя и удаляет соответствующую запись.
Оставьте получение, котороеимя основной программе.