JS实现双向链表

本文介绍了如何使用JavaScript实现双向链表,强调了其相对于C++的简洁性。作者首先阐述了双向链表的基本结构,然后详细讲解了创建节点对象、插入节点、删除节点的算法,并提供了相关函数的实现,包括找到链表尾部、添加节点到末尾及遍历打印链表等功能。此外,还展示了初始化链表的代码和运行结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

链表结构是我们在面试中经常会被问起的较为基础的数据结构问题,起初学习数据结构使用的是C++语言,最近在做前端面试题的过程中没碰到了需要用js实现双链表的需求,百度出来的文章发现可很多错误,于是索性自己重新写了,并且列出了一些错误点,这里给大家较为详细的一步步看一下实现思想和步骤,相较于C++语言,js的实现可以说是很简单了,不需要创建繁琐的对象,更加直观易懂;
首先我们来看一下双向链表的结构图:
在这里插入图片描述
每个结点包含三部分,指向前一个结点的指针(pre),指向后一个节点的指针(next),以及自己的数据部分(element),于是我们就可以先写出结点对象

function Node:定义结点对象

function Node(element) {
   
   
  this.element = element
  this.next = null
  this.previous = null
}

然后我们开始实现插入链表的算法
在这里插入图片描述

(声明)下面函数中的this是我们最后初始化链表的实例,这里大家不要疑惑。可以拉到最下面我们初始化链表那里,相信你会明白呦

**`function insert`:插入节点**
function insert(newelement, currentelement) {
   
   
  var newNode = new Node(newelement)
  var currentNode = this.find(currentelement)
  if (currentNode === 'error') {
   
   
    console.log('无法插入,要插入节点不存在')
    return
  }
  if (currentNode.next != null) {
   
   
    newNode.next = currentNode.next
    currentNode.next = newNode
    newNode.previous = currentNode
    newNode.next.previous = newNode
  } else {
   
   
    currentNode.next = newNode
    newNode.previous = currentNode
  }
}

function find:找到插入位置

function find(element) {
   
   
  var currentNode = this.head
  while (currentNode.element != element) {
   
   
  /*如果找到最后一个节点还没有找到我们的插入点,那么我们就会返回错误*/
    if (currentNode.next == null) {
   
   
      console.log('can not find this node; maybe not have this node')
      return 'error'
    }
    currentNode = currentNode.next
  }
  return currentNode
}

接下来是移除结点的实现,如果看懂了插入节点的实现,那么移除就会很简单了,相信大家都可以很快明白,这里就直接贴出实现代码;

function remove:移除一个结点

function remove(element) {
   
   
  var currentNode = this.find(element)
  if (currentNode === 'error') {
   
   
    console.log('要移除节点不存在')
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值