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
正在检查,找到的就是请求的内容。(这不是集合的结束(