Это мой текущий код, с которым я столкнулся, так что неправильное обращение к первому элементу или только к объекту - это первые 2 части этой функции. По какой-то причине я получаю ошибки памяти, если я просто пытаюсь установить node = node-> next_ .. Я бы предположил, что это будет самый простой способ, но когда я брошу это обратно в программу, я начну получать проблемы с доступом к памяти. все остальные части работают нормально, пока я не манипулирую адресом головы.Удаление узла из дважды связанного списка
void removeNode(struct student_record_node* node)
{
struct student_record_node *temp=NULL;
temp=node;
if(node->next_==NULL&&node->prev_==NULL)
{
node=node->next_
free(node->prev_);
}
else if(node->prev_==NULL&& node->next_!=NULL)
{
node=node->next_
free(node->prev_);
}
else if(node->next_!=NULL && node->prev_!=NULL)
{
node->prev_->next_ = node->next_;
node->next_->prev_ = node->prev_;
student_record_node_deallocate(node);
}
else if(node->prev_!=NULL&& node->next_==NULL)
{
node->prev_->next_=node->next_;
student_record_node_deallocate(node);
}
}
Пожалуйста, пост [Minimal полный и проверяемый Пример] (https://stackoverflow.com/help/ mcve). Основная причина может быть или не быть в этом коде или только в этом коде. – kaylum
В двусвязном списке никогда не должно быть указателя нулевого узла для следующего или предыдущего. Если есть только один узел, он указывает на себя. 'node-> next-> prev = node-> prev; node-> prev-> next = node-> next; free (node); ' – WalterM
@WalterM Нет необходимости, чтобы двусвязный список не содержал нулевого указателя. В двусвязном списке prev головного узла NULL, а следующий из последнего узла - NULL. То, что вы говорите, присутствует в круговом списке ссылок. – Nutan