js算法与数据结构-链表

抽象沙漏
• 阅读 1261

一、链表的定义

每个元素都带有下一个元素的位置。
js算法与数据结构-链表

二、链表的方法

js算法与数据结构-链表
js算法与数据结构-链表

三、js实现如下

var LinkedList = function(){
  //head
  var head = null
  var length = 0;
  //辅助类
  var Node = function(element){
    this.element = element
    this.next = null
  }
  //添加链表元素
  this.append = function(element){
    var node = new Node(element)
    if(head == null){
      head = node
    }else{
      var current = head
      while(current.next){
        current = current.next
      }
      current.next = node 
    }
    length++
  }
  //获取链表头
  this.getHead = function(){
    return head
  }
  //元素的数量
  this.size = function(){
    return length
  }
  //是否为空
  this.isEmpty = function(){
    return this.size == 0
  }

  //插入元素到链表中
  //1.插入表头
  //2.插入链表中间
  this.insert = function(postion, element){
    var node = new Node(element)
    if(postion > -1 && postion < length){
      if(postion == 0){
        var current = head
        head = node
        node.next = current
      }else{
        //先定义两个相邻的元素遍历链表,找到指定的位置
        //后插入指定的位置
        var index = 0
        var previous = null 
        var current = head
        while(index < postion){
          previous = current
          current = current.next
          index++
        }
        previous.next = node
        node.next = current
      }
      length++
    }
  }
    //移除链表中指定的元素
    //1.移除表头
    //2.移除其它元素
    this.removeAt = function(postion){
      if(postion > -1 && postion < length){
        if(postion == 0){
          var current = head
          head = current.next
        }else{
          var index = 0
          var previous = null
          var current = head
          while(index < postion){
            previous = current
            current = current.next
            index++
          }
          previous.next = current.next
        }
        length--
        return current
      }
    }
    //查询元素值对应index索引号
    this.indexOf = function(element){
      var current = head
      var index = 0
      while(current){
        if(current.element == element) return index
        current = current.next
        index++
      }
      return -1
    }
    //根据元素值删除指定的元素
    this.remove = function(element){
      return this.removeAt(this.indexOf(element))
    }

}
//测试用例
//创建一个链表对象
var l = new LinkedList()
//给链表添加元素
l.append(1)
l.append(2)
l.append(3)

js实现的要点

在实现对链表的操作时,往往要进行遍历链表,而进行遍历必定要使用表头,把表头赋值给遍历变量,再利用链表特性,即每个元素都带有下一个元素的位置 如上述代码 current = current.next 这样就可以依次遍历每个元素。

四、测试

给链表添加元素

js算法与数据结构-链表

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
待兔 待兔
1年前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Easter79 Easter79
4年前
tbox链表list和list_entry的使用
TBOX中提供了各种列表操作:1.list:元素在内部维护的双向链表2.list\_entry:元素在外部维护的双向链表3.single\_list:元素在内部维护的单向链表4.single\_list\_entry:元素在外部维护的单向链表由于双链和单链的接口使用类似,这里主要就
似梦清欢 似梦清欢
3年前
链表
线性表的链式存储实现称为链表。!image(https://imghelloworld.osscnbeijing.aliyuncs.com/imgs/eb5f24c795ece73a1f77156aa7131869.png)
梦
5年前
微信小程序new Date()转换时间异常问题
微信小程序苹果手机页面上显示时间异常,安卓机正常问题image(https://imghelloworld.osscnbeijing.aliyuncs.com/imgs/b691e1230e2f15efbd81fe11ef734d4f.png)错误代码vardate'2021030617:00:00'vardateT
Souleigh ✨ Souleigh ✨
5年前
JS 实现单链表
要存储多个元素,数组(或列表)可能是最常用的数据结构。但这种数据结构有一个缺点:(在大多数语言中)数据的大小是固定的,从数组的起点或中间插入或移除项的成本很高。  链表存储有序的集合,但不同于数组,链表中的元素在内存中并不是连续放置的。每个元素由一个存储元素本身的节点和一个指向下一个元素的引用(也称指针或链接)组成。  相对于传统的数组,链表的一个好处是
Wesley13 Wesley13
4年前
Java HashSet集合的子类LinkedHashSet集合
说明HashSet保证元素的唯一性,可是元素存放进去是没有顺序的。在HashSet下面有一个子类java.util.LinkedHashSet,它是链表哈希表(数组链表或者数组红黑树)组合的一个数据结构。即相对HashSet而言,多了一个链表结构。多了的那条链表,用来记录元素的存储顺序,保证元素有序举例Hash
Wesley13 Wesley13
4年前
D1
1\.数据结构  1.1线性结构  (1)最常用的数据结构,特点是数据元素之间存在一对一的线性关系  (2)有两种不同的存储结构,即顺序存储结构和链式存储结构    顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的    链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息
菜园前端 菜园前端
2年前
什么是链表?
原文链接:什么是链表?链表是有序的数据结构,链表中的每个部分称为节点。可以首、尾、中间进行数据存取,链表的元素在内存中不必是连续的空间,每个节点通过next指针指向下一个节点。优点链表的添加和删除不会导致其余元素位移。缺点无法根据索引快速定位元素。数组和链
分布式系统的主键生成方案对比 | 京东云技术团队
UUID​UUID(通用唯一识别码)是由32个十六进制数组成的无序字符串,通过一定的算法计算出来。为了保证其唯一性,UUID规范定义了包括网卡MAC地址、时间戳、名字空间(Namespace)、随机或伪随机数、时序等元素,以及从这些元素生成UUID的算法。