context
Связанный список XOR - это более эффективный по памяти двусвязный список.Вместо каждого узла, содержащего поля next и prev, он содержит поле с именем обоих, которое является XOR следующего узла и предыдущего узла.Реализовать связанный список XOR;у него есть add (элемент), который добавляет элемент в конец, и get (index), который возвращает узел с индексом.
class Node {
constructor(value){
this.value = value;
this.both = 0;
}
}
class XORLinkedList {
constructor(value){
this.head = new Node(value);
}
add(element){
let prev = this.head;
// next of headNode will be currNode
let currNode = null ^ this.head.both;
while (currNode.both != 0){
const next = prev ^ currNode.both;
prev = currNode;
currNode = next;
}
currNode.value = element;
currNode.both = prev ^ null;
}
get(index) {
let prev = null;
let currNode = this.head;
for (let i = 0; i < index; i += 1) {
const temp = currNode;
currNode = prev ^ this.head.both;
prev = temp;
}
return currNode;
}
}
// Driver program
const XLList = new XORLinkedList(3);
XLList.add(5);
XLList.add(7);
console.log(XLList.get(1));
console.log('end');
>>>node XORLinkedList.js
// returns nothing indefinitely, expected a node object with the value 5, prev of 3 and next of 7 and a end message
XORLinkedlist, созданный в JS без явных указателей.Я тестирую методы add
и get
в программе драйвера и хочу узнать, работает ли обход списка правильно или нет, потому что get
ничего не возвращает