返回

js实现链表数据结构的教程:小白也能看懂

前端

对于前端工程师来说,数据结构和算法是至关重要的基础知识。它不仅能帮助我们写出更高效的代码,还能提升我们解决问题的能力。

链表是计算机科学中一种重要的数据结构,它由一组称为节点的元素组成,每个节点包含一个值和指向下一个节点的指针。链表通常用于存储需要频繁插入或删除元素的数据,例如购物清单或音乐播放列表。

在本文中,我们将使用JavaScript来实现一个链表数据结构。JavaScript是一种强大的语言,它提供了许多方便操作数据结构的方法。

1. 创建一个节点类

首先,我们需要创建一个节点类,它将存储链表中的每个元素。节点类应该包含两个属性:val(值)和next(指向下一个节点的指针)。

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

2. 创建一个链表类

接下来,我们需要创建一个链表类,它将管理链表中的节点。链表类应该包含以下方法:

  • add(val):在链表尾部添加一个新的节点。
  • remove(val):从链表中删除一个节点。
  • find(val):在链表中查找一个节点。
  • print():打印链表中的所有节点。
class LinkedList {
  constructor() {
    this.head = null;
    this.tail = null;
    this.length = 0;
  }

  add(val) {
    const newNode = new Node(val);

    if (!this.head) {
      this.head = newNode;
      this.tail = newNode;
    } else {
      this.tail.next = newNode;
      this.tail = newNode;
    }

    this.length++;
  }

  remove(val) {
    if (!this.head) {
      return;
    }

    if (this.head.val === val) {
      this.head = this.head.next;
      if (!this.head) {
        this.tail = null;
      }
      this.length--;
      return;
    }

    let prev = this.head;
    while (prev.next) {
      if (prev.next.val === val) {
        prev.next = prev.next.next;
        if (!prev.next) {
          this.tail = prev;
        }
        this.length--;
        return;
      }
      prev = prev.next;
    }
  }

  find(val) {
    let curr = this.head;
    while (curr) {
      if (curr.val === val) {
        return curr;
      }
      curr = curr.next;
    }
    return null;
  }

  print() {
    let curr = this.head;
    while (curr) {
      console.log(curr.val);
      curr = curr.next;
    }
  }
}

3. 使用链表

现在,我们已经创建了链表类,可以开始使用它了。以下是一些示例:

const linkedList = new LinkedList();

linkedList.add(10);
linkedList.add(20);
linkedList.add(30);
linkedList.add(40);

linkedList.print(); // 输出:10, 20, 30, 40

const foundNode = linkedList.find(20);
console.log(foundNode); // 输出:{ val: 20, next: { val: 30, next: { val: 40, next: null } } }

linkedList.remove(30);
linkedList.print(); // 输出:10, 20, 40

4. 总结

链表是JavaScript中一种重要的数据结构,它可以用来存储需要频繁插入或删除元素的数据。本文介绍了如何使用JavaScript实现链表,并提供了详细的示例。

现在,你已经了解了链表的基础知识,可以开始练习使用它来解决实际问题了。