双向链表 - head 的 prev 元素不可访问
Doubly Linked List - prev element of head not accessible
我正在尝试在双向链表 class 中编写一个 reverse
函数。为此,我想将 "old" 头节点保存在一个变量中,以便稍后在头尾之间切换后访问它。所以稍后当我尝试访问我保存的变量的 prev
节点时,代码抛出一个错误,指出变量值为 null 并且无法访问 prev
。
请记住,我事先编写了诸如 push、pop、shift 等微不足道的函数,没有出现任何错误。
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
函数尚未经过测试,因为我遇到了我提到的问题。
错误(在循环的第一行抛出):
TypeError: Cannot read property 'prev' of null
您的代码中有一个小错别字:
for (let i = 0; 0 < this.length; i++) {
应该读作如下(注意条件中的i
而不是0
):
for (let i = 0; i < this.length; i++) {
正如所写,您的代码迭代了列表设置 current=null 的末尾。
我正在尝试在双向链表 class 中编写一个 reverse
函数。为此,我想将 "old" 头节点保存在一个变量中,以便稍后在头尾之间切换后访问它。所以稍后当我尝试访问我保存的变量的 prev
节点时,代码抛出一个错误,指出变量值为 null 并且无法访问 prev
。
请记住,我事先编写了诸如 push、pop、shift 等微不足道的函数,没有出现任何错误。
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
函数尚未经过测试,因为我遇到了我提到的问题。
错误(在循环的第一行抛出):
TypeError: Cannot read property 'prev' of null
您的代码中有一个小错别字:
for (let i = 0; 0 < this.length; i++) {
应该读作如下(注意条件中的i
而不是0
):
for (let i = 0; i < this.length; i++) {
正如所写,您的代码迭代了列表设置 current=null 的末尾。