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();