数据结构与算法 — 初识双向链表、双向链表的常见操作及实现

目录

一、初识双向链表

二、双向链表的封装

三、双向链表的常见操作及实现

  1.双向链表中常见的操作

  2.append()方法

  3.toString()方法、forwardtoString()方法、backwardtoString()方法

  4.insert()方法

  5.get()方法

  6.indexOf()方法

  7.update()方法

  8.removeAt()方法

  9.remove()方法

  10.isEmpty()方法

  11.size()方法

  12.获取链表的第一个元素

  13.获取链表的最后一个元素


一、初识双向链表

        之前阐述过链表的基本实现,此处的链表指的是单向链表,具体参考以下博客内容:

数据结构与算法 — 初识链表、链表的常见操作及实现icon-default.png?t=LBL2https://blog.csdn.net/m0_59897687/article/details/122360986?spm=1001.2014.3001.5502

        单向链表只能从头遍历到尾或者从尾遍历到头(一般从头到尾),也就是说链表相连的过程是单向的。单向链表实现的原理是上一个链表中有一个指向下一个的引用。

        但是,单向链表有一个比较明显的缺点:我们可以轻松的到达下一个节点,但是回到前一个节点是很难的。在实际开发中,经常会遇到需要回到上一个节点的情况。为了解决这个问题,就需要使用双向链表。

        双向链表既可以从头遍历到尾,又可以从尾遍历到头,也就是说链表相连的过程是双向的。它的实现原理是一个节点既有向前连接的引用,也有一个向后连接的引用

        双向链表的缺点是每次在插入或删除某个节点时,需要处理四个引用,而不是两个。实现起来麻烦一些,并且相对于单向链表,占用内存空间更大一些。

         双向链表的特点:

  • 可以使用一个head和一个tail分别指向头部和尾部的节点
  • 每个节点由三部分组成:前一个节点的指针(prev)、保存的元素(item)、后一个节点的指针(next)
  • 双向链表的第一个节点的prev是null
  • 双向链表的最后的节点的next是null

 

二、双向链表的封装

        //封装双向链表
        function DoublyLinkedList() {
            //属性
            this.head = null
            this.tail = null
            this.length = 0
        }

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

三、双向链表的常见操作及实现

  1.双向链表中常见的操作

  • append(element):向列表尾部添加一个新的项
  • insert(position, element):向列表的特定位置插入一个新的项。
  • get(position):获取对应位置的元素
  • indexOf(element):返回元素在列表中的索引。如果列表中没有该元素则返回-1
  • update(position, element):修改某个位置的元素
  • removeAt(position):从列表的特定位置移除一项。
  • remove(element):从列表中移除一项。
  • isEmpty():如果链表中不包含任何元素,返回true,如果链表长度大于0则返回false。
  • size():返回链表包含的元素个数。与数组的length属性类似。
  • toString():由于列表项使用了Node类,就需要重写继承自JavaScript的对象默认的toString方法,让其只输出元素的值
  • forwardString():返回正向遍历的节点
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值