搜索功能 - 链接列表

时间:2015-10-26 20:09:49

标签: c++ list function search

我正在使用搜索功能来搜索链接列表中的特定值。当它找到我要输出其位置的值时。我似乎无法越过第一个节点而不会出现错误。我觉得循环有问题,但我不确定是什么。

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;  
}

4 个答案:

答案 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)

由于无法将doublenullptr

进行比较,因此会出现编译错误

答案 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类型,但我猜测valuedouble

  

while (nodePtr->value != NULL)

您要检查double是否不是NULLNULL本质上是0)。但是您需要针对nodePtr测试NULL

注意:考虑使用nullptr而不是NULLnullptr是空指针的类型安全值,并且会产生编译错误。< / p>

  

错误:类型'double'和'std :: nullptr_t'的无效操作数为二进制'operator =='