如何检查元素是否存在于 c++ 中的链表中

How to check if element exists in a linked list in c++?

本文关键字:存在 c++ 是否 链表 元素 何检查 检查      更新时间:2023-10-16

问题:

假设有一个链表类,它有多个方法可以使用。代码的主要部分是这样的:

int main ()
{
  List l;
  l.push_back (86);
  l.push_front (43);
  l.push_front (12);
  int intToSearchFor = 12;
  if (l.exists (intToSearchFor))
    {
      cout << "(" << intToSearchFor << ") found :)";
    }
  else
    {
      cout << "(" << intToSearchFor << ") not found :(";
    }
}

正如您在这段代码中看到的,List 类有两个方法可以将新项追加到列表中。而且它还有一个迭代器方法,让我们循环项目并检查每个节点中的数据。

问题出在哪里?

我想创建一个检查元素是否存在的方法。例如,l.exists(12)应返回 truefalse

我的解决方案:

  1. 开始使用迭代器循环访问项目。
  2. 检查项目数据是否等于您要查找的数据。
  3. 如果相等,则返回true。否则,如果列表中有更多项目,请移动到列表中的下一项并转到步骤 2。
  4. 如果列表中没有其他项目,则返回false
bool List::exists (int x)
{
  Iterator it = this->get_iterator ();
  do {
    
    if (it.current->data == x) {
        return true;
    }
    
    it.current = it.current->next;
  } while (it.has_more_elements ());
  return false;
}

完整答案:

http://cpp.sh/6cfdh

在访问指针指向的数据之前,您应该检查指针是否指向 nullptr(请参阅has_more_elements())。 更好的命名可以避免一些混淆。

   while(it.current->data!=x && it.has_more_elements())
    it.current=it.current->next;
return (it.current->data==x)?true:false;

如果x不存在并且it到达列表末尾,it.current->data将导致运行时错误,因为it可能会NULL

 while(it.has_more_elements() && it.current->data!=x)
   it.current = it.current->next;
 return it.current!=NULL;