双向链表 - 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 的末尾。