【发布时间】:2015-05-21 18:19:37
【问题描述】:
我在从列表中删除所选节点时遇到问题。任务是删除所有包含用户选择的数据的节点并计算它们。例如删除所有包含 3 的节点并计算它们。函数应返回带有已删除节点数的整数。我的函数弹出节点代码和弹出所有节点(包括特定数据)的代码在这里。我使用 Visual Studio 2012 并且调试说一些指针指向空间。内存读取失败。有什么问题?
void pop(Node * head, Node * pointer) //delete node with given pointer
{
Node * p = head;
if (pointer == head)
{
head = p->next;
delete p;
}
else
{
while( p->next != pointer )
{
p = p->next;
}
p->next = pointer->next;
delete pointer;
}
}
int pop_all(Node * head, float data_out) //delete all nodes with proper data
{
Node * p = head;
int counter = 0;
while(p->next != NULL)
{
if (p->data == data_out)
{
pop(head,p);
counter++;
}
else
{
p = p->next;
}
}
return counter;
}
【问题讨论】:
-
很确定这应该被标记为 C.
-
您的代码第一次无法正确检查包含 1 个元素 (p->next == NULL) 的列表。
-
请注意,在通过
pop_all()弹出一个元素后,您需要一个p->next,因为您所在的完全相同的节点现在已被删除。 -
此外,您正在直接与浮点值进行比较。考虑使用 epsilon 或其他数据类型,因为直接浮点比较通常不会像您认为的那样工作。
-
我没有。这是帖子错误。
标签: c++