上下文:从文件(input.txt)创建一个循环的双向链表,其中包含一个名称列表。名称数量未知。
提示用户输入要删除的节点数,然后从列表中删除。
假设:用户输入的数字不会超过列表中的实际节点数。
问题:我的删除节点功能不起作用,因为当我去显示被认为已删除的节点中的内容时,数据仍然存在。任何帮助?
我的代码:http://www.cplusplus.com/forum/general/210015/
(我正在链接到其他网站,因为它更容易格式化。)
答案 0 :(得分:2)
我的删除节点功能不起作用,因为当我去显示被认为已删除的节点中的内容时,数据仍然存在。
访问已销毁(已删除)的对象具有未定义的行为。
当行为未定义时,您无法期望程序的行为方式。因此期望 "数据不应该在那里" 是没有根据的。正确的期望是数据可能会或可能不存在,并且程序可能会或可能不会崩溃,并且守护程序可能会或可能不会飞出用户鼻子。
答案 1 :(得分:0)
void deleteNode(struct node *&head)
的代码有很多错误。
head
是否为nullptr current->next
和/或current->prev
是否为nullptr 访问nullptr指针是未定义的行为,这可能意味着崩溃或意外结果或其他。
答案 2 :(得分:0)
尝试使用以下删除功能删除节点。 注意:假设从头部开始删除。
void deleteNode(struct node *&head,int deleteCount)
{
if(head != NULL){
struct node *current=head; //copy of head.
struct node *temp,*headPrev,*headNext;
headPrev = head->prev;
headNext = head->next;
int count = 0;
while(count++ < deleteCount)
{
//add code to free current node from me
temp = current; //get rid of this node
currrent = current->next; //skip all the nodes you want delete
}
current->prev = headPrev;
headPrev->next = current;
head = current;
}
}