我正在使用搜索功能来搜索链接列表中的特定值。当它找到我要输出其位置的值时。我似乎无法越过第一个节点而不会出现错误。我觉得循环有问题,但我不确定是什么。
int NumberList::search(double num)
{
ListNode *nodePtr;
nodePtr=head;
int i=0;
while (nodePtr->value!= NULL)
{
i=i+1;
if (nodePtr->value==num)
return i;
else
nodePtr=nodePtr->next;
}
return 0;
}
答案 0 :(得分:1)
你的while循环是incorect。您应该测试nodePtr
不是NULL
while (nodePtr != NULL)
{
i = i + 1;
if (nodePtr->value == num)
return i;
else
nodePtr = nodePtr->next;
}
这也是在处理指针时使用nullptr
而不是NULL
的完美理由。如果您使用了nullptr
,那么
while (nodePtr->value!= nullptr)
由于无法将double
与nullptr
答案 1 :(得分:1)
我不知道对应的类是如何定义的,但我认为无论如何该函数应该看起来如下
int NumberList::search(double num)
{
ListNode *nodePtr = head;
int i = 0;
while ( nodePtr != NULL && nodePtr->value != num )
{
++i;
nodePtr = nodePtr->next
}
return nodePtr != NULL ? ++i : 0;
}
很难比较两个浮点数。您应该使用比较方法,例如考虑epsilon。
还要考虑到其他功能,例如将节点添加到列表中的功能也可能是错误的。:)
答案 2 :(得分:0)
你的while循环条件应该是:
while (nodePtr != NULL)
由于此错误,您可能正在访问指针为NULL
的节点。通过解除引用此操作,您将导致未定义的行为。
答案 3 :(得分:0)
您没有显示ListNode
类型,但我猜测value
是double
。
while (nodePtr->value != NULL)
您要检查double
是否不是NULL
(NULL
本质上是0
)。但是您需要针对nodePtr
测试NULL
。
注意:考虑使用nullptr
而不是NULL
,nullptr
是空指针的类型安全值,并且会产生编译错误。< / p>
错误:类型'double'和'std :: nullptr_t'的无效操作数为二进制'operator =='