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