【发布时间】:2015-12-15 03:29:11
【问题描述】:
这是我当前的代码,我搞砸了,所以我如何处理第一项或唯一一项是错误的,这是该函数的前 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 Complete and Verifiable Example。根本原因可能在也可能不在此代码中或仅在此代码中。
-
在双向链表中,永远不应该有指向下一个或上一个的空节点指针。如果只有 1 个节点,则它指向自身。
node->next->prev = node->prev; node->prev->next = node->next; free(node); -
@WalterM 双向链表不必包含任何空指针。在双向链表中,头节点的 prev 为 NULL,最后一个节点的 next 为 NULL。您所说的内容存在于循环链接列表中。
-
如果你想改变头指针的节点,我认为你需要传递
headptr的地址并用双指针捕获它
标签: c doubly-linked-list