JavaScript【数据结构与算法】(二) 单向链表

个人博客地址:https://tao-yuhan.gitee.io/tyhanblog/
在这里插入图片描述

链表的优势

  • 链表中的元素在内存中不必是连续的空间
  • 链表的每一个元素由一个存储元素本身的节点和一个指向下一个元素的引用
  • 链表在创建的时候不需要确定大小,大小可以无线延伸下去

单向链表的一些基本操作

链表得有一个head指向第一个节点,其次每个节点中有data和next,next指向下一个节点

  • append(element): 在尾部添加一个新的项
  • insert(position,ele): 向链表的特定位置插入一个新的项
  • get(position): 获取对应位置的元素
  • indexOf(ele): 返回元素在链表中的索引,如果没有该元素则返回-1
  • update(position,ele): 修改某个位置的元素
  • removeAt(position): 从列表的特定位置移除一项
  • remove(ele): 从链表中移除一项
  • isEmpty(): 是否为空
  • size(): 链表长度
  • toString(): 输出元素的值

链表操作的封装

链表的基本实现

function LinkedList() {
   
 this.head = null
 this.length = 0

 //节点类
 function Node(data) {
   
   this.data = data
   this.next = null
 }
}

1.append

LinkedList.prototype.append = function (data) {
   
  //先创建这个节点
  let newNode = new Node(data)
  //如果添加的为第一个节点,将head指针指向该节点的data
  if (this.length == 0) {
   
    this.head = newNode
  } else {
   
    let current = this.head
    while (current.next) {
   
      //找下一个
      current = current.next
    }
    //最后节点的next指向新的节点
    current.next = newNode
  }
  this.length++
}

2.insert

LinkedList.prototype.insert = function (position, data) {
   
  //对position进行越界判断和长度判断
  if (position < 0 || position > this.length) return false

  //创建节点
  let newNode = new Node(data)
  //如果是插入在第一个
  if (position == 0) {
   
    newNode.next = this.head
    this.head = newNode
  } else {
    //如果不是插入第一个
    let index = 0 //自己定义一个位置
    let current = this.head //先让current为第一个节点
    while (index++ < position - 1) {
    //3
      current = current.next
    }
    newNode.next = current.next
    current.next = newNode
  }
  this.length++
  return true
}

3.get

LinkedList.prototype.get = function (position
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

boboj1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值