Ваша программа работает нормально, единственная реальная ошибка, которую я обнаружил, - SearchNode
: если элемент отсутствует в списке, вы входите в бесконечный цикл.Ваш список, очевидно, является циклическим списком, и поэтому вам нужно проверить, не вернулись ли вы в голову в функции, что означает, что искомого элемента нет в списке:
Исправленная версия:
Node SearchNode(Node head)
{
int d;
printf("\nElement to Delete:");
scanf("%d", &d);
Node start = head; // remember where we started
while (head != NULL)
{
if (head->n == d)
{
return head;
}
head = head->next;
if (head == start) // if we are back to where we started
break; // the element hasn't been found and we stop the loop
}
printf("\nNo Element [%d] Found", d);
return NULL;
}
Существуют также некоторые недостатки проектирования, которые не мешают программе работать правильно:
Один из них таков: переменная n
не используется вне ReadData
, поэтому бессмысленно объявлять это в main
и передавать его указатель на ReadData
.
Исправленная версия:
void ReadData(Node * head)
{
int n; // declare n locally
printf("\nInsert a number:");
scanf("%d", &n);
NewNode(head, n);
}
Называть это так: ReadData(&head)
и удалить int n;
от main
.