📅  最后修改于: 2023-12-03 15:40:21.923000             🧑  作者: Mango
在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中,我们可以使用节点类和链表类来实现链表。在这篇文章中,我们讨论了如何添加、插入、获取和删除链表元素,并且还讨论了如何获取链表的大小。