js中的链表
文章类型:Javascript
发布者:admin
发布时间:2023-05-16
1:链表(Linked List)是一种常见的数据结构,用于存储和管理数据。链表由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针
2:与数组不同,链表的节点在内存中不必是连续存储的,每个节点可以独立分配内存,插入和删除更加高效,但访问元素效率较低
1:任意的内存空间(可连续、也可不连续)
2:每个节点(node)都由数据本身和一个指向后续节点的指针组成
3:整个链表的存取必须从头指针开始,头指针指向第一个节点
1:简单链表=>每个节点都包含一个唯一的链接后继元素字段
2:双向链表=>每个节点都包含一个双向链接,节点指向后继元素作为前驱
3:循环链表=>最后一个节点指向链表中的第一个节点
1:创建节点
2:插入节点
3:搜索/遍历节点
4:删除节点
5:合并
class Node {
constructor(data) .
{
this.data = data;
this.next = null;
}
}
class LinkedList {
constructor() {
this.head = null;
}
append(data) {
const newNode = new Node(data);
if (this.head === null) {
this.head = newNode;
} else {
let current = this.head;
while (current.next) {
current = current.next;
}
current.next = newNode;
}
}
prepend(data) {
const newNode = new Node(data);
newNode.next = this.head;
this.head = newNode;
}
insertAfter(targetData, data) {
const newNode = new Node(data);
let current = this.head;
while (current) {
if (current.data === targetData) {
newNode.next = current.next;
current.next = newNode;
break;
}
current = current.next;
}
}
delete(data) {
if (this.head === null) {
return;
}
if (this.head.data === data) {
this.head = this.head.next;
return;
}
let current = this.head;
while (current.next) {
if (current.next.data === data) {
current.next = current.next.next;
return;
}
current = current.next;
}
}
display() {
let current = this.head;
while (current) {
console.log(current.data);
current = current.next;
}
}
}
// 使用链表
const linkedList = new LinkedList();
linkedList.append(1);
linkedList.append(2);
linkedList.append(3);
linkedList.prepend(0);
linkedList.insertAfter(1, 1.5);
linkedList.delete(2);
linkedList.display();