📅  最后修改于: 2023-12-03 15:37:03.559000             🧑  作者: Mango
当需要存储有序的数据时,链表是一个非常有用的数据结构。单链表是一种链表,其中每个节点都由一个数据部分和一个链接部分组成。链接指向下一个节点的地址,而最后一个节点链接到null。
在JavaScript中,我们可以通过创建一个Node对象来表示单链表的每个节点。然后,我们可以编写一个LinkedList类来定义一些基本操作,如插入节点,删除节点等。
class Node {
constructor(data) {
this.data = data;
this.next = null;
}
}
节点类有两个属性:data和next。data是节点中存储的数据部分,而next是指向链表中下一个节点的指针。
class LinkedList {
constructor() {
this.head = null;
this.size = 0;
}
// 在链表头部加入一个节点
addFirst(data) {
let node = new Node(data);
node.next = this.head;
this.head = node;
this.size++;
}
// 在链表最后加入一个节点
addLast(data) {
let node = new Node(data);
let current;
// 如果链表为空,则添加第一个节点
if (this.head == null)
this.head = node;
else {
current = this.head;
// 循环到最后一个节点
while (current.next) {
current = current.next;
}
// 将最后一个节点的next链接到新节点
current.next = node;
}
this.size++;
}
// 在链表的任何位置插入节点
insertAt(data, index) {
// 如果给定的索引大于链表的长度,直接返回
if (index > 0 && index > this.size)
return false;
else {
// 创建一个新节点
let node = new Node(data);
let current, previous;
current = this.head;
// 链表头部
if (index === 0) {
node.next = this.head;
this.head = node;
} else {
current = this.head;
let position = 0;
// 循环到插入的位置
while (position < index) {
position++;
previous = current;
current = current.next;
}
// 在插入的位置插入新节点
node.next = current;
previous.next = node;
}
this.size++;
}
}
// 删除给定位置的节点
removeFrom(index) {
if (index > 0 && index > this.size)
return -1;
else {
let current, previous, position = 0;
current = this.head;
previous = current;
// 删除头部
if (index === 0) {
this.head = current.next;
} else {
// 循环到要删除的位置
while (position < index) {
position++;
previous = current;
current = current.next;
}
// 删除当前节点
previous.next = current.next;
}
this.size--;
// 返回删除的节点
return current.data;
}
}
// 打印链表
printList() {
let current = this.head;
let str = "";
while (current) {
str += current.data + ", ";
current = current.next;
}
console.log(str);
}
}
这是一个基本的LinkedList类,它包含几种常见的操作:在链表头部插入节点,尾部插入节点,插入节点到给定的索引,删除节点和打印链表。
现在,我们将使用LinkedList类创建一个包含3个节点的单链表,并将50插入到列表中的第二个位置。
let list = new LinkedList();
list.addLast(10);
list.addLast(20);
list.addLast(30);
list.insertAt(50, 1);
list.printList();
输出:10, 50, 20, 30
我们可以看到,节点50已成功插入到链表中的位置1。
使用JavaScript创建单链表可能看起来很棘手,但实际上很简单。通过创建一个Node类和一个LinkedList类,我们可以轻松地执行一些常见的链表操作,例如在任何位置插入节点,删除节点,并在需要时打印链表。