HashTable с использованием отдельной цепочки - PullRequest
0 голосов
/ 10 марта 2020

Я пытаюсь создать класс HashTable, используя отдельную цепочку. Проблема существует в том, что когда я использую метод "insert", подобный этому:

public void insert(int k, int v) {
    if (k < 0 || k >= 10) {
        throw new IllegalArgumentException();
    }
    ListNode front = hTable.get(k);
    if (front.data == 0 && front.next == null) {
        front.data = v;
    } else { 
        front = new ListNode(v, front);
    }
}

, мой список заканчивается только одним узлом. Может быть, потому что что-то происходит, когда я вставляю значение спереди:

else { 
        front = new ListNode(v, front);
    }

Но когда я изменяю этот метод и пытаюсь вставить в конец списка:

else {
        while (front.next != null) {
            front = front.next;
        }
        front.next = new ListNode(v);
    }

Список теперь работает и может содержать несколько значений. Почему я не могу вставить в начало списка?

1 Ответ

0 голосов
/ 10 марта 2020

front = new ListNode(v, front); изменяет значение фронта локальной переменной, но не значение hTable.get(k). hTable.get(k) по-прежнему возвращает старое значение после смены фронта. Чтобы это работало, вам также необходимо обновить hTable, чтобы сохранить этот новый фронт как начало цепочки.

...