基于单链表的哈希表插入功能故障求助
哈希表插入问题的解决方案
嘿,我一眼就瞅到你代码里的问题啦!咱们来拆解下为啥后续插入没生效:
你的insertKey函数在处理非空哈希桶时,遍历逻辑出了岔子。你用while (temp != NULL)循环到temp变成空指针,这时候给temp赋值新节点——但**temp只是个局部变量啊!** 它和原链表的最后一个节点已经没任何关联了,你改的只是这个临时指针的指向,根本没把新节点链接到原链表的尾部。
修正后的代码
void insertKey(int key) { int i = Hash(key); Node* temp = HashTable[i]; Node* NewNode = new Node; NewNode->key = key; NewNode->next = NULL; if (temp == NULL) { HashTable[i] = NewNode; } else { // 遍历到链表的最后一个节点(而非temp变成NULL) while (temp->next != NULL) { cout << "NOTHere "; temp = temp->next; } // 把最后一个节点的next指向新节点,真正加入链表 cout << "FoundYa "; temp->next = NewNode; } }
关键修正点
- 调整遍历终止条件:从
temp != NULL改成temp->next != NULL,循环结束时temp是链表的最后一个有效节点,而非空指针。 - 真正链接新节点:直接修改
temp->next指向新节点,这样新节点才会被挂到原链表的尾部,而不是修改一个无关的局部指针。
额外小建议
如果你的哈希表需要避免重复key,可以在遍历的时候加个判断:
while (temp != NULL) { if (temp->key == key) { // 已存在相同key,释放新节点避免内存泄漏,直接返回 delete NewNode; return; } if (temp->next == NULL) break; temp = temp->next; }
内容的提问来源于stack exchange,提问作者Shaharyar Khan
相关产品推荐
相关产品推荐

