从哈希表中删除节点

时间:2017-11-01 23:15:17

标签: c++ hashmap singly-linked-list

我创建了一个哈希表,其中包含哈希表每个槽中的单链表。我最近更改了我的代码,以便当我在该哈希表中插入一个新节点时,每个插槽都将是一个已排序的链表(只需将其插入正确的位置,而不是对其进行排序)。我目前将此作为删除功能:

void hashDelete(int key){
    int hashLoc = h(key);
    HashNode *entry = hTable[hashLoc];
    HashNode *prev = NULL;

    if(entry == NULL || entry->value != key){
        cout << "No element found at key" << endl;
       return;
    }

    while(entry->next != NULL){
        prev = entry;
        entry = entry->next;
    }
    if(prev != NULL){
        prev->next = entry->next;
    }
    delete entry;
    cout << "Entry Successfully Deleted" << endl;

}

当我将新节点插入到链表的末尾时,这适用于我的插入,但是当我将新节点插入到链表的正确排序点时,它现在不起作用。

如何调整此删除功能,以便正确查找和删除正确的值。

注意:这是我的搜索功能,它将搜索该值并说明它是否在hashmap中(可以正常工作)

int hashSearch(int key){
    bool flag = false;
    int hashLoc = h(key);
    HashNode *entry = hTable[hashLoc];
    while(entry != NULL){
        if(entry->value == key){
            return 1;
            flag = true;
        }
        entry = entry->next;
    }
    if(!flag)
        return -1;
}

0 个答案:

没有答案