Ниже приведен узел удаления в коде списка ссылок, который принимает указатель головы и позицию для удаления в качестве аргументов (индекс позиции начинается с нуля в списке ссылок).И после удаления возвращает указатель на голову.
Node* delete(Node* head, int position)
{
Node *p = head;
if(!position)
{
p = p->next;
}
else
{
while(position--)
{
if(!position) head->next = head->next->next;
head = head->next;
}
}
free(head);
return p;
}
Предположим, список: 20-2-19-7-3-6.И позиция для удаления равна 2 (узел 19 для удаления, так как индекс начинается с нуля).
После удаления и печати, он говорит: 20-2-0-3-6. (Т.е. узел непосредственно следующийна один удаленный отпечаток 0)
Но если я уберу строку "free (head)", то она напечатает: 20-2-7-3-6 (правильно).
Пожалуйстапомогите и объясните, почему.
PS: при удалении головного или хвостового узла проблем не возникает.Но любой другой узел между ними показывает 0 в следующем узле.