📜  构建链表 javascript (1)

📅  最后修改于: 2023-12-03 15:40:21.923000             🧑  作者: Mango

构建链表 JavaScript

在JavaScript中,链表是一种线性数据结构,由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。链表的实现通常需要定义节点类和链表类。

定义节点类

首先,我们需要定义一个节点类,该类包含两个属性:一个存储数据的值和一个指向下一个节点的指针。

class Node {
  constructor(data, next = null) {
    this.data = data;
    this.next = next;
  }
}

我们在构造函数中初始化数据值和指针。如果没有为next传递任何值,我们将其设置为null。

定义链表类

现在,我们可以定义链表类。该类包含两个属性:一个指向链表头部的指针和链表长度。

class LinkedList {
  constructor() {
    this.head = null;
    this.size = 0;
  }
}

在构造函数中,我们初始化头指针为null,并且将链表长度设置为0。

在链表末尾添加节点

我们可以使用add()方法在链表末尾添加节点。该方法首先检查链表是否为空。如果是,它将创建一个新节点,并将它设置为链表头部。否则,它将沿着链表到达末尾,并在末尾添加新节点。

class LinkedList {
  // ...
  add(data) {
    const node = new Node(data);
    let current;

    if (!this.head) {
      this.head = node;
    } else {
      current = this.head;

      while (current.next) {
        current = current.next;
      }

      current.next = node;
    }

    this.size++;
  }
}
在链表中插入节点

我们可以使用insertAt()方法向链表中插入节点。该方法在给定的位置创建一个新节点,并将其插入到链表中。

class LinkedList {
  // ...
  insertAt(data, index) {
    if (index < 0 || index > this.size) {
      return;
    }

    const node = new Node(data);
    let current = this.head;
    let previous;

    if (index === 0) {
      node.next = current;
      this.head = node;
    } else {
      for (let i = 0; i < index; i++) {
        previous = current;
        current = current.next;
      }

      node.next = current;
      previous.next = node;
    }

    this.size++;
  }
}
获取链表元素

我们可以使用getAt()方法获取链表中给定位置的元素。

class LinkedList {
  // ...
  getAt(index) {
    if (index < 0 || index >= this.size) {
      return null;
    }

    let current = this.head;

    for (let i = 0; i < index; i++) {
      current = current.next;
    }

    return current.data;
  }
}
从链表中移除元素

我们可以使用removeAt()方法从链表中删除给定位置的元素。

class LinkedList {
  // ...
  removeAt(index) {
    if (index < 0 || index >= this.size) {
      return;
    }

    let current = this.head;
    let previous;

    if (index === 0) {
      this.head = current.next;
    } else {
      for (let i = 0; i < index; i++) {
        previous = current;
        current = current.next;
      }

      previous.next = current.next;
    }

    this.size--;
    return current.data;
  }
}
获取链表的大小

我们可以使用getSize()方法来获取链表的大小。

class LinkedList {
  // ...
  getSize() {
    return this.size;
  }
}
示例

以下是链表的使用示例:

const ll = new LinkedList();
ll.add(1);
ll.add(2);
ll.add(3);
ll.insertAt(4, 1);

console.log(ll.getAt(2)); // 2

ll.removeAt(0);
console.log(ll.getAt(0)); // 2
console.log(ll.getSize()); // 3
结论

链表是一种强大的数据结构,用于存储和操作大量数据。在JavaScript中,我们可以使用节点类和链表类来实现链表。在这篇文章中,我们讨论了如何添加、插入、获取和删除链表元素,并且还讨论了如何获取链表的大小。