如何检查元素是否存在于 c++ 中的链表中
How to check if element exists in a linked list in c++?
问题:
假设有一个链表类,它有多个方法可以使用。代码的主要部分是这样的:
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)
应返回 true
或 false
。
我的解决方案:
- 开始使用迭代器循环访问项目。
- 检查项目数据是否等于您要查找的数据。
- 如果相等,则返回
true
。否则,如果列表中有更多项目,请移动到列表中的下一项并转到步骤 2。 - 如果列表中没有其他项目,则返回
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;
相关文章:
- C++模板来检查友元函数的存在
- 既然存在危险,为什么项目要使用-I include开关
- 我们可以访问一个不存在的联盟的成员吗
- C++:对不存在的命名空间使用命名空间指令
- C++quit()函数中可能存在作用域问题
- C++擦除(如果存在)
- g++ 说函数不存在,即使包含正确的标头
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 有了gcc,是否可以链接库,但前提是它存在
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- gcc和clang在表达式是否为常量求值的问题上存在分歧
- C++Builder中的OnClick事件签名存在问题
- 如何正确地将分支添加到已存在的树中
- 我知道函数调用中存在歧义.有没有办法调用foo()函数
- 如何检查QList中是否存在值
- 根据某个函数是否存在启用模板
- 如何将分支添加到已存在的TTree:ROOT
- 地图计数确实很重要,或者只是检查是否存在
- 通用C++/Python 多语言的存在
- 为什么我的共享库中存在展开符号