Вставка в таблицу Ha sh с использованием односвязных списков - PullRequest
0 голосов
/ 09 мая 2020

Я здесь новенький, мне нужна помощь с этой проблемой, проблема в том, что он сохраняет значение для первой записи, но когда я создаю список, например, когда я хочу вставить 22 после Я вставил 2 раньше, он ведет себя так, как если бы он добавил узел после 2, но на самом деле он не создает, и я не знаю почему. Нужна помощь, пожалуйста.

 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
        {
            while (temp != NULL) {
                cout << "NOTHere ";
                temp = temp->next;
            }
            if (temp == NULL) {
                cout << "FoundYa ";
                temp = NewNode;
            }
        }
    }

1 Ответ

1 голос
/ 09 мая 2020

Когда вы назначаете temp = NewNode;, вы фактически не устанавливаете значение предыдущего temp->next на NewNode. Вам не нужно устанавливать temp на NewNode, вам нужно установить temp->next на NewNode один раз temp->next == NULL.

То, что вы сейчас делаете, это:

[ node 1 ] --> nullptr
                 |
                 |
        assign nullptr to temp
                 |
                 V
                temp <--- then assign NewNode to temp

Что вам нужно сделать, это:

[ node 1 ] --> nullptr
    |
    |
  assign this to temp
    |
    V
   temp --> nullptr <-- assign NewNode to this
...