0

我是 C++ 新手,我正在尝试编写一个算法来搜索链表,但我的逻辑有点问题。这 ???粗体问号是我遇到问题的部分。我很感激这方面的任何帮助。

  ListNode *MyLinkedList::Search(int key)
{
    ListNode *temp = head;  // Assume ListNode is a structure and contains the variable int key;
    // Search for the key
    while((temp != NULL) && (key != temp->key))
    {
        temp = temp -> next; // Advance to next node
    {
    if(**???**)     // Make sure node is found
    {   
        return **???**; // If found, return appropriate value
    }
    else 
    {   
        return NULL;  // return NULL when not found
    }
}
4

5 回答 5

1

试试这个代码:

ListNode *MyLinkedList::Search(int key, ListNode *head)
{
    ListNode *temp = head;  // Assume ListNode is a structure and contains the variable         int key;
    // Search for the key
    while(temp != NULL)
    {
        if (key == temp->key)
           return temp;
        temp = temp -> next; // Advance to next node
    }
    return NULL;  // return NULL when not found
}

编辑

如果您不需要编写自己的容器,则应该使用 stl 中的列表和查找算法;它们经过测试且安全:

http://en.cppreference.com/w/cpp/container/list

http://en.cppreference.com/w/cpp/algorithm/find

于 2013-10-16T17:03:27.863 回答
1

如果找到密钥key == temp->key将为真并且temp != NULL将为假,因此:

if(key == temp->key)     // Make sure node is found
{   
    return temp; // If found, return appropriate value
}

或者:

if (temp != NULL)     // Make sure node is found
{   
    return temp; // If found, return appropriate value
}
于 2013-10-16T17:01:59.177 回答
0

你可以这样做:

if(temp != NULL)     // Make sure node is found
{   
    return temp; // If found, return appropriate value
}

但更简单的是

return temp;

因为如果 temp 为 null,则无论如何您都希望返回 null。

于 2013-10-16T17:02:54.257 回答
0

这对你有用

if(temp != NULL) // Make sure node is found
{
    return temp; // Make sure node is found
}
于 2013-10-16T17:02:39.320 回答
0

你不需要一个if. 刚回来temp。如果列表中存在正确的键,则temp指向它,否则为NULL.

于 2013-10-16T17:02:05.940 回答