📜  单链表创建包含 3 个节点插入一个节点,数据为 50 - Javascript (1)

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

单链表创建包含 3 个节点插入一个节点,数据为 50 - JavaScript

当需要存储有序的数据时,链表是一个非常有用的数据结构。单链表是一种链表,其中每个节点都由一个数据部分和一个链接部分组成。链接指向下一个节点的地址,而最后一个节点链接到null。

在JavaScript中,我们可以通过创建一个Node对象来表示单链表的每个节点。然后,我们可以编写一个LinkedList类来定义一些基本操作,如插入节点,删除节点等。

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

节点类有两个属性:data和next。data是节点中存储的数据部分,而next是指向链表中下一个节点的指针。

LinkedList类
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类,我们可以轻松地执行一些常见的链表操作,例如在任何位置插入节点,删除节点,并在需要时打印链表。