Я пытаюсь написать функцию reverse
в классе двусвязных списков. Для этого я хотел сохранить «старый» головной узел в переменной, чтобы получить к нему доступ позже после того, как я переключусь между головой и хвостом. Поэтому позже, когда я пытаюсь получить доступ к узлу prev
переменной, которую я сохранил, код выдает ошибку, сообщающую, что значение переменной равно нулю, и prev
недоступен. Имейте в виду, что заранее я написал тривиальные функции, такие как pu sh, pop, shift et c. без ошибок.
class Node {
constructor(val) {
this.val = val;
this.next = null;
this.prev = null;
}
}
class DoublyLinkedList {
constructor() {
this.head = null;
this.tail = null;
this.length = 0;
}
push(val) {
var newNode = new Node(val);
if (this.length === 0) {
this.head = newNode;
this.tail = newNode;
} else {
this.tail.next = newNode;
newNode.prev = this.tail;
this.tail = newNode;
}
this.length++;
return this;
}
reverse() {
var current = this.head;
this.head = this.tail;
this.tail = current;
var prev, next;
for (let i = 0; 0 < this.length; i++) {
prev = current.prev;
next = current.next;
current.next = prev;
current.prev = next;
current = next;
}
return this;
}
}
let doubly = new DoublyLinkedList();
doubly.push("1");
doubly.push("2");
doubly.push("3");
doubly.push("4");
doubly.reverse();
Моя функция reverse
еще не проверена, потому что я застрял с упомянутой проблемой. Ошибка (выдается в первой строке l oop):
TypeError: Cannot read property 'prev' of null