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日

相关文章

  • C++中的自定义函数返回类型

    当我们在编写C++程序时,会经常使用函数。而有时候标准库中提供的函数可能无法满足我们的需求,这时候我们就需要自定义函数。自定义函数返回类型是指,在函数定义中明确指定函数的返回类型,以这个类型作为函数的返回值。以下是详细的攻略: 一、函数返回类型概述 函数的返回类型指的是函数执行完成后返回值的数据类型。C++中函数可以返回各种数据类型,包括整型、浮点型、字符型…

    other 2023年6月26日
    00
  • 手把手教你labview串口仪器控制——visa驱动下载安装篇

    手把手教你LabVIEW串口仪器控制——VISA驱动下载安装篇 在LabVIEW中,使用串口控制仪器是非常常见的操作。为了实现串口控制,需要安装VISA驱动程序。本文将提供VISA驱动下载安装的完整攻略,包括以下步骤: 下载VISA驱动程序 安装VISA驱动程序 配置VISA驱动程序 同时,本文将提供两个示例说明,以帮助用户更好地理解VISA驱动下载安装的方…

    other 2023年5月9日
    00
  • js获取本机的外网/广域网ip地址完整源码

    获取本机的外网/广域网IP地址是一个常见的需求,可以通过以下步骤来实现: 使用第三方服务获取IP地址:有一些网站提供了API,可以通过发送HTTP请求获取本机的外网IP地址。其中一个常用的服务是https://api.ipify.org,它返回一个包含IP地址的简单文本响应。 javascript // 使用fetch函数发送HTTP请求获取IP地址 fet…

    other 2023年7月31日
    00
  • Windbg Extension NetExt 使用指南 — NetExt 介绍

    Windbg是Windows平台下的一款强大的调试工具,而NetExt是Windbg的一个扩展,它提供了一些有用的命令和函数,用于分析和调试.NET应用程序。本文将详细介绍NetExt的使用方法和示例说明。 NetExt介绍 NetExt是一个Windbg扩展,它提供了一些有用的命令和函数,用于分析和调试.NET应用程序。NetExt包含了许多有用的命令和函…

    other 2023年5月5日
    00
  • mysql中的join和where优先级顺序解读

    MySQL中的JOIN和WHERE优先级顺序解读 在MySQL中,使用JOIN关键字可以将多个表连接起来,而WHERE子句被用来过滤结果集。在使用JOIN和WHERE的时候,需要了解它们的优先级顺序,以确保查询语句能够得到正确的结果。 JOIN和WHERE的优先级 在MySQL中,JOIN的优先级高于WHERE,这意味着查询语句中的JOIN操作会先执行,然后…

    other 2023年6月28日
    00
  • 一文带你熟练掌握Java中的日期时间相关类

    一文带你熟练掌握Java中的日期时间相关类 前言 在Java编程中,日期时间操作是一个常见的需求,涉及到的类也比较多,如java.util.Date、java.util.Calendar、java.time.LocalDate、java.time.LocalDateTime等等。面对如此众多的类,我们应该如何进行选择使用呢?这篇文章将为您介绍Java中常用的…

    other 2023年6月26日
    00
  • Android实现记住用户名和密码功能

    Android实现记住用户名和密码功能攻略 在Android应用中,实现记住用户名和密码的功能,可以让用户下次登陆时直接进行数据填充,提高用户交互体验。下面,将详细讲解实现该功能的完整攻略。 第一步:添加布局界面 首先,在登录界面的布局文件中添加两个CheckBox组件,分别用于选择是否记住用户名和密码。如下所示: <CheckBox android:…

    other 2023年6月27日
    00
  • iOS10发布会直播 WWDC2016苹果开发者大会视频/图文直播地址汇总

    iOS10发布会直播 WWDC2016苹果开发者大会视频/图文直播地址汇总 介绍 WWDC是苹果开发者年度盛事,是所有苹果爱好者和开发者关注的焦点。其中的iOS发布会更是备受关注,世界各地的人们都想第一时间关注到这个盛况。本文将为大家提供iOS10发布会直播的视频和图文直播地址,方便大家快速获取官方信息。 视频直播地址 苹果公司提供了官方的视频直播地址,可以…

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