javascript写的一个链表实现代码

链表是常见的数据结构之一,在JavaScript中也可以用来实现一些常见的算法。本文将介绍如何使用JavaScript实现一个链表,并提供两个示例说明。

编写链表实现代码

下面是一个简单的JavaScript链表实现代码:

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

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

  // Add element to linked list
  add(data) {
    const node = new Node(data);
    if (this.head === null) {
      this.head = node;
    } else {
      let current = this.head;
      while (current.next !== null) {
        current = current.next;
      }
      current.next = node;
    }
    this.size++;
  }

  // Insert element at given position
  insertAt(data, index) {
    if (index < 0 || index > this.size) {
      return;
    }
    const node = new Node(data);
    let current = this.head;
    if (index === 0) {
      node.next = current;
      this.head = node;
    } else {
      let previous = null;
      let count = 0;
      while (count < index) {
        previous = current;
        current = current.next;
        count++;
      }
      node.next = current;
      previous.next = node;
    }
    this.size++;
  }

  // Remove element at given index
  removeFrom(index) {
    if (index < 0 || index >= this.size) {
      return;
    }
    let current = this.head;
    if (index === 0) {
      this.head = current.next;
    } else {
      let previous = null;
      let count = 0;
      while (count < index) {
        previous = current;
        current = current.next;
        count++;
      }
      previous.next = current.next;
    }
    this.size--;
  }

  // Print linked list data
  print() {
    let current = this.head;
    while (current !== null) {
      console.log(current.data);
      current = current.next;
    }
  }
}

上面的代码定义了两个类,一个是Node,表示链表节点,另一个是LinkedList,表示链表对象。链表类中包含了添加、插入、删除和打印数据的方法。

示例1:使用链表实现栈

栈是常见的数据结构,可以用链表来实现。下面是使用上面的链表实现代码来实现一个栈的例子:

class Stack {
  constructor() {
    this.list = new LinkedList();
  }

  // Add element to the top of stack
  push(data) {
    this.list.add(data);
  }

  // Remove element from top of stack
  pop() {
    this.list.removeFrom(this.list.size - 1);
  }

  // Print stack data
  print() {
    this.list.print();
  }
}

const stack = new Stack();
stack.push(1);
stack.push(2);
stack.push(3);
stack.print(); // Output: 1 2 3
stack.pop();
stack.print(); // Output: 1 2

上面的代码中定义了一个Stack类,使用链表来实现栈的数据结构。在栈类中包含了push添加数据、pop移除数据和print打印栈中的数据的方法。

示例2:使用链表实现队列

队列是同样常见的数据结构,也可以使用链表来实现。这里提供一个使用上面实现的链表代码来实现队列的例子:

class Queue {
  constructor() {
    this.list = new LinkedList();
  }

  // Add element to the end of queue
  enqueue(data) {
    this.list.add(data);
  }

  // Remove element from front of queue
  dequeue() {
    this.list.removeFrom(0);
  }

  // Print queue data
  print() {
    this.list.print();
  }
}

const queue = new Queue();
queue.enqueue(1);
queue.enqueue(2);
queue.enqueue(3);
queue.print(); // Output: 1 2 3
queue.dequeue();
queue.print(); // Output: 2 3

上面代码中定义了一个Queue类,使用链表来实现队列的数据结构。在队列类中包含了enqueue添加数据、dequeue移除数据和print打印队列中的数据的方法。

以上就是使用JavaScript实现链表的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:javascript写的一个链表实现代码 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • CentOS 7 搭建ntp时钟服务器的步骤详解

    下面我就来详细讲解CentOS 7 搭建ntp时钟服务器的步骤: 1. 安装 NTP 首先安装 NTP,操作如下: sudo yum install ntp 2. 配置 NTP 安装完成后,需要进行 NTP 的配置,打开 NTP 配置文件,操作如下: sudo vi /etc/ntp.conf 在打开的 ntp 配置文件中添加 NTP 服务器,例如: ser…

    other 2023年6月27日
    00
  • 1+1>2! 西部数据(西数)SSD+HDD二合一硬盘详尽测试图文讲解

    当然,下面是关于西部数据(SSD+HDD)二合一硬盘的详尽测试图文讲解的完整攻略,包含两个示例说明: 西部数据(SSD+HDD)二合一硬盘详尽测试 1. 硬件介绍 西部数据(SSD+HDD)二合一硬盘是一种结合了固态硬盘(SSD)和机械硬盘(HDD)的创新产品。它的设计旨在提供高速的数据传输和大容量的存储空间。 2. 性能测试 为了评估西部数据(SSD+HD…

    other 2023年10月17日
    00
  • 属于自己的Android对话框(Dialog)自定义集合

    针对“属于自己的Android对话框(Dialog)自定义集合”的完整攻略,下面将进行详细讲解。 1.前言 Dialog是Android开发中常用的一个组件,一般情况下系统已经提供了许多定制化的Dialog,但这些Dialog并不能直接满足我们的业务需求,因此需要自定义Dialog,本攻略将用实例来展示如何编写属于自己的Dialog组件。 2.思路分析 自定…

    other 2023年6月25日
    00
  • 使用@Transactional 设置嵌套事务不回滚

    使用@Transactional注解可以在Spring中管理事务。默认情况下,如果一个方法被标记为@Transactional,并且在该方法中发生了异常,事务将会回滚。然而,有时候我们可能希望在某些情况下禁止事务回滚,特别是在嵌套事务中。下面是使用@Transactional设置嵌套事务不回滚的攻略: 配置事务管理器: 首先,确保你的Spring应用程序已经…

    other 2023年7月28日
    00
  • java 使用过滤器实现登录拦截处理

    Java使用过滤器实现登录拦截处理,可以基于Servlet的过滤器实现,这种方式可以在不改变原有代码的情况下实现权限控制等工作。具体操作步骤如下: 1.编写过滤器类 首先,需要编写一个类实现javax.servlet.Filter接口,实现对请求的拦截,并在其doFilter()方法中添加登录验证及权限控制等逻辑代码。示例代码如下: import java.…

    other 2023年6月27日
    00
  • 阿里druid介绍及配置

    阿里Druid介绍及配置的完整攻略 阿里Druid是一款高性能的数据库连接池和监控平台,它支持MySQL、Oracle、SQL Server等多种数据库。阿里Druid提供了以下功能: 数据库连接池管理:阿里Druid可以管理数据库连接池,包括连接池大小、最大连接数、最小连接数等。 SQL执行监控:阿里Druid可以监控SQL执行情况,包括执行时间、执行次数…

    other 2023年5月10日
    00
  • 分享MySQL常用 内核 Debug 几种常见方法

    分享MySQL常用内核Debug几种常见方法 MySQL是一个广泛使用的数据库管理系统,MySQL内核的Debug是MySQL开发人员必不可少的参考和调试工具。本文将详细介绍MySQL常用内核Debug的几种常见方法。 1. 使用GDB进行Debug GDB是一个强大的开源调试器,可以用于各种编程语言的调试,包括MySQL。以下是一个基本的GDB MySQL…

    other 2023年6月26日
    00
  • java格式化数字操作 NumberFormat及DecimalFormat

    让我为您讲解一下“java格式化数字操作 NumberFormat及DecimalFormat”的攻略。 1. NumberFormat及DecimalFormat简介 NumberFormat是java.util包中的一个抽象类,是将数字格式化为字符串的基类,它提供了很多方法来格式化数字,例如将数字格式化为货币、百分数等。 DecimalFormat是Nu…

    other 2023年6月26日
    00
合作推广
合作推广
分享本页
返回顶部