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日

相关文章

  • php中$_REQUEST、$_POST、$_GET的区别和联系小结

    PHP中$_REQUEST、$_POST、$_GET的区别和联系小结 在PHP中,$_REQUEST、$_POST和$_GET是用于获取用户提交的数据的超全局变量。它们之间有一些区别和联系,下面是它们的详细解释: 1. $_REQUEST $_REQUEST是一个包含了通过GET、POST和COOKIE方式提交的数据的关联数组。它可以获取到所有的HTTP请求…

    other 2023年7月29日
    00
  • 微软Win10 SDK开发者工具已正式发布 附下载地址

    标题:微软Win10 SDK开发者工具已正式发布 附下载地址 首先介绍Win10 SDK开发者工具的概念以及作用,Win10 SDK开发者工具是一组开发工具和库,它可用于构建应用程序以运行在Windows 10操作系统上。开发人员可以使用Win10 SDK开发者工具,创建各种不同的应用程序,例如桌面应用程序、UWP应用程序、游戏、设备驱动程序,还可以开发各种…

    other 2023年6月26日
    00
  • Flutter开发之Widget自定义总结

    本篇文章是Flutter开发中自定义Widget的总结,以下是整个过程的详细攻略。 一、前言 Flutter的开发范围非常广泛,而UI就是其中最重要的部分。本文将通过一些实例来讲解如何自定义Widget。 二、基础环境 Flutter 1.22.0 或更新版本 三、基础知识 在开始自定义Widget之前,我们需要了解一些基础知识。 Widget是Flutte…

    other 2023年6月25日
    00
  • 详解阿里云服务器添加安全组规则(图文教程)

    当你在使用阿里云服务器时,进行端口映射或者配置安全策略时需要添加安全组规则,这可以帮助你加强防火墙的安全性,允许或者拒绝特定IP地址、端口或者协议访问云服务器。下面是详解阿里云服务器添加安全组规则的完整攻略: 1. 登录阿里云官网 首先,打开浏览器,进入阿里云官网,登录自己的账户。在阿里云控制台页面中找到“安全管理”和“网络与安全”两个入口,点击“安全组配置…

    other 2023年6月27日
    00
  • 关于cmd:如何从.ps1文件运行powershell脚本?

    以下是关于“关于cmd:如何从.ps1文件运行powershell脚本?”的完整攻略,过程中包含两个示例。 背景 PowerShell是一种跨平台的任务自化和配置框架,它可以在、Linux和macOS上运行。PowerShell脚本是一种用于自动化任务的脚本语,可以通过PowerShell命令行或PowerShell ISE(集成脚本环境)运行。本攻略将介绍…

    other 2023年5月9日
    00
  • 初探Delphi中的插件编程

    初探Delphi中的插件编程 什么是Delphi插件编程? Delphi插件编程是指通过编写插件程序来扩展Delphi的功能,实现模块化开发的一种方式。Delphi插件编程可以大大提高程序的灵活性和可扩展性,使程序的功能更加丰富。 插件编程的主要原理 Delphi插件编程的主要原理是使用插件接口标准来实现插件间的通信。 具体来说,插件接口标准定义了插件与宿主…

    other 2023年6月27日
    00
  • 强制在git中进行合并的最佳方法是什么?

    以下是关于“强制在Git中进行合并的最佳方法是什么?”的完整攻略,过程中包含两个示例。 背景 在Git中,有时需要强制进行合并。本攻略将介绍如何在Git中强制进行合并的最佳方法。 基本原理 在Git中,强制进行合并的最佳方法是使用–allow-unrelated-histories选项。该选项允许合并两个没有共同祖先的分支。具体步骤如下: 切换到目标分支。…

    other 2023年5月9日
    00
  • 如何让U盘同时兼容Windows和Mac OS X系统?

    如何让U盘同时兼容Windows和Mac OS X系统? 在默认情况下,Windows和Mac OS X操作系统使用的文件格式不同,因此U盘通常只支持其中一种操作系统,不能同时被两种操作系统所读取。对于需要在Windows和Mac OS X系统之间进行文件传输的用户来说,这无疑是一个大问题。但是,有一些方法可以让U盘兼容Windows和Mac OS X系统:…

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