JavaScript描述数据结构-链表

509 阅读2分钟

这是我参与新手入门的第1篇文章

链表的定义

链表是有一组节点组成的集合,每个节点包括一个节点本身的值和一个指向下一个节点的引用。下图就展示了一个链表的结构。

linked-list.png

实现链表

知道了什么是链表,接下来我们就开始实现一个链表。下面我们定义链表的类。

class LinkedList {
  constructor() {
    this.head = null;
    this.count = 0;
  }
}

这里我们声明的 count 属性用来表示链表中节点的个数,head 属性用来存储链表中的第一个节点。

要表示链表中的第一个节点或其他节点,我们还需要一个辅助类,可以叫作 Node。Node 类是我们想要添加到链表中的项,它包含一个value属性,表示当前节点的值;以及一个next属性,指向下一个节点的引用。代码如下所示。

export class Node {
  constructor(value) {
    this.value = value
    this.next = null
  }
}

下面我们要为 LinkedList 类添加一些方法。

向链表的尾部添加一个节点

向链表的尾部添加节点分为两种情况:

  1. 链表为空,添加的是第一个节点
  2. 链表不为空,向链表追加一个节点 下面我们实现这个方法。
  push(value) {
    const node = new Node(value);
    if (this.head == null) {
      this.head = node;
    } else {
      let current = this.head;
      while (current.next != null) {
        current = current.next;
      }
      current.next = node;
    }
    this.count++;
  }

首先我们将 value 作为值传入,创建 Node。 然后我们判断head有没有值,如果没有我们将新建的 node 直接赋值给他;如果有值,我们首先声明一个变量 current 来保存 head 的值。接着我们通过一个 while 循环类判断 current 的 next 有没有值,有则说明它不是最后一个节点,我们将 current 的 next 赋值给 current,然后重复这一操作,直到找到 next 为空的 current,将我们新建的 node 赋值给他。最后我们还要让节点的个数增加一个。

未完待续……