如何 return 指向线性列表中项目的指针

How to return an pointer to an item in the linear list

我有在线性列表中搜索键的功能,但是当我想要 return 元素上的指针时我出错了。

struct Item
{
    datatype key;
    Item* next;
   Item* prev;
};

int List::search(int x)
{
    Item* temp = head;
    if (head == NULL)
    {
        cout << "Empty List" << endl;
    }
    while (temp != NULL)
    {
        if (temp->key == x) 
        {
            break;
        }
        else
        {
            temp = temp->next;
        }
    }
    return *temp;\here i have a error
}

这里:

int List::search(int x)
{
  Item* temp = head;
  ...
  return *temp;\here i have a error
}

如果要获取指向元素的指针,那么函数应该returnItem*,而不是int.

如果 temp 是一个 Item*,那么 *temp 就是一个 Item。它既不是 Item* 也不是 int

也许尝试改变:

Item* List::search(int x)
{
    Item* temp = head;
    if (temp == NULL)
    {
        cout << "Empty List" << endl;
        return NULL;
    }
    while (temp != NULL)
    {
        if (temp->key == x) 
        {
            return temp;
        }
        else
        {
            temp = temp->next;
        }
    }

    return NULL;
}

How to return an pointer to an item in the linear list

显然,对于初学者来说,您需要将函数的 return 类型从 int 更改为 Item *

Item * List::search( int x );

并且在函数中你需要return确实是一个指针而不是指向的项目。

该函数不应输出任何消息。函数的用户将根据空指针是否 returned 来决定是否输出任何消息。

应该为常量和非常量列表重载该函数。

这里显示了如何定义它

Item * List::search( int x )
{
    Item *target = head;

    while ( target != nullptr && target->key != x )
    {
        target = target->next;
    }

    return target;
}

const Item * List::search( int x ) const
{
    const Item *target = head;

    while ( target != nullptr && target->key != x )
    {
        target = target->next;
    }

    return target;
}