[英]Remove duplicates from linked list 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
語句被執行,否則,如果它是集合,真正的分支。
seen.find(curr->data)
返回一個迭代器來查找它所找到的內容。
如果它沒有找到請求的內容,它會返回一個迭代器,該迭代器經過列表中的最后一個元素。 這稱為seen.end()
。
所以if
正在檢查,找到的就是請求的。 (這不是集的結尾)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.