文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何在JavaScript中使用双向链表

2023-06-07 18:44

关注

这篇文章给大家介绍如何在JavaScript中使用双向链表,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

JavaScript的特点

1.JavaScript主要用来向HTML页面添加交互行为。2.JavaScript可以直接嵌入到HTML页面,但写成单独的js文件有利于结构和行为的分离。3.JavaScript具有跨平台特性,在绝大多数浏览器的支持下,可以在多种平台下运行。

// 创建双向链表的构造函数function DoublyLinkedList() { // 创建节点构造函数 function Node(element) {  this.element = element  this.next = null  this.prev = null // 新添加的 } // 定义属性 this.length = 0 this.head = null this.tail = null // 新添加的 // 定义相关操作方法 // 在尾部追加数据 DoublyLinkedList.prototype.append = function (element) {  // 1.根据元素创建节点  var newNode = new Node(element)  // 2.判断列表是否为空列表  if (this.head == null) {   this.head = newNode   this.tail = newNode  } else {   this.tail.next = newNode   newNode.prev = this.tail   this.tail = newNode  }  // 3.length+1  this.length++ } // 在任意位置插入数据 DoublyLinkedList.prototype.insert = function (position, element) {  // 1.判断越界的问题  if (position < 0 || position > this.length) return false  // 2.创建新的节点  var newNode = new Node(element)  // 3.判断插入的位置  if (position === 0) { // 在第一个位置插入数据   // 判断链表是否为空   if (this.head == null) {    this.head = newNode    this.tail = newNode   } else {    this.head.prev = newNode    newNode.next = this.head    this.head = newNode   }  } else if (position === this.length) { // 插入到最后的情况   // 思考: 这种情况是否需要判断链表为空的情况呢? 答案是不需要, 为什么?   this.tail.next = newNode   newNode.prev = this.tail   this.tail = newNode  } else { // 在中间位置插入数据   // 定义属性   var index = 0   var current = this.head   var previous = null   // 查找正确的位置   while (index++ < position) {    previous = current    current = current.next   }   // 交换节点的指向顺序   newNode.next = current   newNode.prev = previous   current.prev = newNode   previous.next = newNode  }  // 4.length+1  this.length++  return true } // 根据位置删除对应的元素 DoublyLinkedList.prototype.removeAt = function (position) {  // 1.判断越界的问题  if (position < 0 || position >= this.length) return null  // 2.判断移除的位置  var current = this.head  if (position === 0) {   if (this.length == 1) {    this.head = null    this.tail = null   } else {    this.head = this.head.next    this.head.prev = null   }  } else if (position === this.length -1) {   current = this.tail   this.tail = this.tail.prev   this.tail.next = null  } else {   var index = 0   var previous = null   while (index++ < position) {    previous = current    current = current.next   }   previous.next = current.next   current.next.prev = previous  }  // 3.length-1  this.length--  return current.element } // 根据元素获取在链表中的位置 DoublyLinkedList.prototype.indexOf = function (element) {  // 1.定义变量保存信息  var current = this.head  var index = 0  // 2.查找正确的信息  while (current) {   if (current.element === element) {    return index   }   index++   current = current.next  }  // 3.来到这个位置, 说明没有找到, 则返回-1  return -1 } // 根据元素删除 DoublyLinkedList.prototype.remove = function (element) {  var index = this.indexOf(element)  return this.removeAt(index) } // 判断是否为空 DoublyLinkedList.prototype.isEmpty = function () {  return this.length === 0 } // 获取链表长度 DoublyLinkedList.prototype.size = function () {  return this.length } // 获取第一个元素 DoublyLinkedList.prototype.getHead = function () {  return this.head.element } // 获取最后一个元素 DoublyLinkedList.prototype.getTail = function () {  return this.tail.element } // 遍历方法的实现 // 正向遍历的方法 DoublyLinkedList.prototype.forwardString = function () {  var current = this.head  var forwardStr = ""  while (current) {   forwardStr += "," + current.element   current = current.next  }  return forwardStr.slice(1) } // 反向遍历的方法 DoublyLinkedList.prototype.reverseString = function () {  var current = this.tail  var reverseStr = ""  while (current) {   reverseStr += "," + current.element   current = current.prev  }  return reverseStr.slice(1) } // 实现toString方法 DoublyLinkedList.prototype.toString = function () {  return this.forwardString() }}

关于如何在JavaScript中使用双向链表就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯