从链表C++中删除重复项


void removeDuplicates(struct Node *start){
unordered_set<int> seen;
struct Node *curr = start;
struct Node *prev = NULL;
while(curr != NULL){
if(seen.find(curr->data) != seen.end()){
prev->next = curr->next;
delete(curr);
}
else{
seen.insert(curr->data);
prev = curr;
}
curr = prev->next;
}
}

C ++的新手,任何人都可以解释这种情况:

if(seen.find(curr->data) != seen.end())

为什么我们只与集合的 end(( 进行比较,我们不应该只检查我们是否已经可以在集合中找到元素吗?

我们不应该只检查我们是否已经可以在集合中找到元素吗?

这正是该代码的作用。 如果找到元素,std::unordered_set::find将迭代返回给元素,否则返回结束迭代器。

如果数据不在集合中,则执行if语句的 else 分支,否则,如果数据集合中,则执行 true 分支。

seen.find(curr->data)返回它找到的迭代器。

如果找不到请求的内容,它将返回列表中最后一个元素之后的迭代器。这称为seen.end().

因此,if正在检查,找到的就是请求的内容。(这不是集合的结束(

相关内容

  • 没有找到相关文章

最新更新