【发布时间】:2018-04-14 07:25:36
【问题描述】:
我已经成功地制作了一个哈希映射,每个插槽中都有链接和单链表。当我使用插入时,它将新节点发送到每个链表的后面,但是当我插入一个新节点时,我需要对每个插槽进行排序。如何编辑下面的 insert 函数,以便不必在之后对每个插槽进行排序,而是将其插入到正确的位置开始?
void hashInsert(int key){
int hashLoc = h(key);
HashNode* prev = NULL;
HashNode* entry = hTable[hashLoc];
while(entry != NULL){
prev = entry;
entry = entry->next;
}
if(entry == NULL){
entry = new HashNode(key);
if(prev == NULL){
hTable[hashLoc] = entry;
}
else{
prev->next = entry;
}
}
else{
entry->value = key;
}
}
【问题讨论】:
-
你不需要将它添加到链接的最后一个位置,只需将它添加到具有比它更大的值的节点之前。您可以为此使用比较函数或 lambda,而不是小于或大于运算符。您仍然需要为其分配新的 HashNode 并将其之前的节点的下一个指针值设置为它,并将它的下一个值设置为紧随其后的下一个节点。一个到节点之后。
-
我将要创建的新 HashNode 设置为什么?
-
您要添加的密钥
标签: c++ hashtable singly-linked-list