Сделал простую хеш-таблицу с 26 клавишами (буквами алфавита), которая будет содержать различные слова.
Если произойдет столкновение (скажем, два слова с одной и той же первой буквой), я сделаюсвязанный список внутри хеш-таблицы.
Чтобы сделать вещи немного быстрее, при помещении новых слов в хеш-таблицу я хочу добавить его в начало списка, а не перебирать весь список просто для добавленияслово.
Допустим, у меня есть связанный список:
{"test", "towel", "taxes"}
0 1 2
, и я добавляю слово отряд:
{"troop", "test", "towel", "taxes"}
0 1 2 3
Вот мой код:
class Node{
constructor(word){
this.word = word;
this.next = null;
}
}
class Hashtable{
constructor(size = 26){
this.table = new Array(size);
}
put(word){ // adds a word to a hashtable
let key = word[0]; // this hashtable is really simple, the key will be the word's first letter
let node = new Node(word); // creates a node that contains the word and a pointer to the next node
if(this.table[key] == undefined){ // if this hash table has never been used before, intiialize it
this.table[key] = node;
}
else{ // appends the node (word) to the BEGINNING of the linked list
node.next = this.table[key]; // sets the node's pointer to the first element of the linked list.
this.table[key] = node; // the first element of the list now points to this node
}
console.log(this.table[key]);
}
}
А теперь я добавляю эти слова:
hashtable.put("test");
hashtable.put("toto");
И вот вопрос:
Дажехотя я добавляю «toto» в последнюю очередь, он не попадает в начало списка.
Есть ли способ сделать это?