返回

JavaScript实现单链表,轻松掌握链表的基本操作

前端







# JavaScript实现单链表

## 单链表的基本概念

单链表是一种线性的数据结构,由一组节点组成。每个节点包含两个部分:数据字段和下一个节点的指针。数据字段存储实际的数据,而下一个节点的指针指向下一个节点。第一个节点称为头节点,最后一个节点称为尾节点。

## 使用JavaScript实现单链表

### 创建单链表

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

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

  add(data) {
    const node = new Node(data);

    if (this.length === 0) {
      this.head = node;
      this.tail = node;
    } else {
      this.tail.next = node;
      this.tail = node;
    }

    this.length++;
  }
}

插入节点

insert(data, index) {
  if (index < 0 || index > this.length) {
    throw new Error("Index out of bounds");
  }

  const node = new Node(data);

  if (index === 0) {
    node.next = this.head;
    this.head = node;
  } else {
    let current = this.head;
    let previous;

    for (let i = 0; i < index; i++) {
      previous = current;
      current = current.next;
    }

    previous.next = node;
    node.next = current;
  }

  this.length++;
}

删除节点

remove(index) {
  if (index < 0 || index >= this.length) {
    throw new Error("Index out of bounds");
  }

  if (index === 0) {
    this.head = this.head.next;
    if (this.length === 1) {
      this.tail = null;
    }
  } else {
    let current = this.head;
    let previous;

    for (let i = 0; i < index; i++) {
      previous = current;
      current = current.next;
    }

    previous.next = current.next;
    if (index === this.length - 1) {
      this.tail = previous;
    }
  }

  this.length--;
}

查找节点

find(data) {
  let current = this.head;

  while (current !== null) {
    if (current.data === data) {
      return current;
    }

    current = current.next;
  }

  return null;
}

遍历链表

forEach(callback) {
  let current = this.head;

  while (current !== null) {
    callback(current.data);
    current = current.next;
  }
}

总结

在本文中,我们介绍了单链表的基本概念,并演示了如何使用JavaScript代码来创建、插入、删除和查找链表中的元素。希望这篇文章能帮助您理解并掌握单链表的基本操作,从而扩展您的编程技能。