c ++指针的LinkedList重新散列

时间:2013-11-16 04:13:06

标签: c++ for-loop linked-list hashmap

我有一个功能完备的hashMap类,一切似乎都运行得很好除了一个rehash函数,用于在前一个hashmap的加载因子达到0.8时创建一个hashmap。

void HashMap::reHash()
{
    logins = 0;
    numberOfPairs = 0;
    Node** newBucket = new Node* [(2 * lengthOfMap) + 1];
    for(int i = 0; i < lengthOfMap; i++)
    {
        Node* oldHead = bucketList[i];
        for(Node* temp = oldHead; temp != nullptr; temp = temp-> next)
        {
            std::string key = oldHead->key;
            std::string value = oldHead->value;
            unsigned int index = hash(key) % lengthOfMap;
            if(newBucket[index] == nullptr)
            {
                std::cout << "HIT" << std::endl;
                newBucket[i] = new Node;
                newBucket[i]->key = key;
                newBucket[i]->value = value;
                newBucket[i]->next = nullptr;
                numberOfPairs[index]++;
                logins++;
            }

            else if (bucketList[index] != nullptr)
            {
                Node* temp = bucketList[index];
                while(temp->next != nullptr)
                {
                    temp = temp->next;
                }
                Node* n = new Node;
                n->key = key;
                n->value = value;
                temp->next = n;
                n->next = nullptr;
                std::cout << "FAIL at index: " << index << std::endl;
                //numberOfPairs[index]++;
                logins++;
            }   
        }
    }

    for(int i = 0; i < lengthOfMap; ++i)
    {
        if( bucketList[i] )
        {
            Node* first = bucketList[i];
            while( first )
            {
                Node* temp = first->next;
                delete first;
                first = temp;
            }
        }
    }
    delete bucketList;
    bucketList = newBucket;
    lengthOfMap = (2 * lengthOfMap) + 1;
}

bucketList []是我以前的Node *数组,每个都开始链表中的第一个链接。为了自己的利益,我添加了一对std :: cout,而且我似乎一遍又一遍地陷入永久循环阅读FAIL at index:0。我承认我是for循环遍历链表的新手,我认为这是我问题的根源,但我正在寻找任何有用的输入。 再次感谢。

0 个答案:

没有答案