簡體   English   中英

從鏈表 C++ 中刪除重復項

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM