JavaScript封装单向链表的示例代码


Posted in Javascript onSeptember 17, 2020

使用JavaScript封装单向链表:

1. 封装LinkList的类,用于表示我们的链表结构。

2. 在LinkList类中有一个Node类,用于封装每一个节点上的信息(data与next)。

3. 在链表中保存两个属性,一个是链表的长度,一个是链表中的第一个节点。

4.封装一些链表的常用方法:

  • append(element):想列表尾部添加一个新的项;
  • insert(position,element):向列表的特定位置插入一个新的项;
  • get(position):获取对应位置的元素;
  • indexOf(element):返回元素在链表中的索引,如果链表中没有该元素则返回-1;
  • update(position,element):修改某个位置的元素;
  • removeAt(postion):从列表的特定位置移除一项;
  • remove(element):从列表中移除一项;
  • isEmpty():如果链表中不包含任何元素,返回true,否则返回false;
  • size():返回链表中包含元素的个数;
  • toString():输出链表元素的值;
<script type="text/javascript">
	function LinkList(){
		/* 节点类 */
		function Node(data){
			this.data = data
			this.next = null
		}
		
		this.head = null
		this.length = 0
		/* 追加方法 */
		LinkList.prototype.append = function(data){
			/* 创建新节点 */
			var newNode = new Node(data)
			if(this.length === 0){
				this.head = newNode
			}else{
				/* 找到最后一个节点 */
				var current = this.head
				while(current.next){
					current = current.next
				}
				current.next = newNode
			}
			this.length += 1
		}

		/* toString方法 */
		LinkList.prototype.toString = function(){
			var current = this.head
			var listString = ""
			
			while(current){
				listString += current.data +" "
				current = current.next
			}
			return listString
		}

		/* insert方法 */
		LinkList.prototype.insert = function(position,data){
			/* 对position进行越界判断 */
			if(position<0||position>this.length) return false
			var node = new Node(data)
			if(position == 0){
				node.next = this.head
				this.head = node
			}else{
				var index = 0
				var current = this.head
				var previous = null
				while(index++ < position){
					previous = current
					current = current.next
				}
				node.next = current
				previous.next = node
			}
			this.length += 1
			return true
		}
		
		/* get方法 */
		LinkList.prototype.get = function(position){
			/* 越界判断 */
			if(position<0 || position >= this.length) return null
			
			var current = this.head
			var index = 0
			while(index++ < position){
				current = current.next
			}
			return current.data
		}

		/* indexOf方法 */
		LinkList.prototype.indexOf = function(data){
			/* 定义变量 */
			var current = this.head
			var index = 0
			/* 开始查找 */
			while(current){
				if(current.data === data){
					return index
				}else{
					current = current.next
					index += 1
				}
			}
			return -1
		}

		/* update方法 */
		LinkList.prototype.update = function(position,data){
			/* 越界判断 */
			if(position<0 || position >= this.length) return false
			
			var current = this.head
			var index = 0
			while(index++ < position){
				current = current.next
			}
			/* 修改data */
			current.data = data
			return true
		}

		/* removeAt方法 */
		LinkList.prototype.removeAt = function(position){
			/* 越界判断 */
			if(position<0 || position >= this.length) return null
			var current = this.head
			if(position === 0){
				this.head = this.head.next
			}else{
				var index = 0
				var previous = null
				while(index++ < position){
					previous = current
					current = current.next
				}
				previous.next = current.next
			}
			this.length -= 1
			return current.data
		}
		
		/* remove */
		LinkList.prototype.remove = function(data){
			/* 根据data找位置 */
			var position = this.indexOf(data)
			return this.removeAt(position)
		}
		
		LinkList.prototype.isEmpty = function(){
			return this.length === 0
		}
		
		LinkList.prototype.size = function(){
			return this.length
		}
		
	}
	
	
	/* 测试 */
	var list = new LinkList()
	list.append('a')
	list.append('b')
	list.append('c')
	console.log(list.toString()) /* a b c */
	
	list.insert(3,'d')
	console.log(list.toString())/* a b c d */
	
	console.log(list.get(2)) /* c */
	console.log(list.indexOf('d')) /* 3 */
	
	list.update(1,'bbb')
	console.log(list.toString()) /* a bbb c d */
	
	console.log(list.removeAt(2)) /* c */
	console.log(list.toString())/* a bbb d */
	
	console.log(list.remove('a'))
	console.log(list.toString())/* bbb d */
	
	console.log(list.isEmpty()) /* false */
	
	console.log(list.size()) /* 2 */
</script>

以上就是JavaScript封装单向链表的示例代码的详细内容,更多关于JavaScript封装单向链表的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
JS获取IUSR_机器名和IWAM_机器名帐号的密码
Dec 06 Javascript
javascript验证只能输入数字和一个小数点示例
Oct 21 Javascript
javaScript如何处理从java后台返回的list
Apr 24 Javascript
JavaScript操作cookie类实例
Mar 31 Javascript
javascript中DOM复选框选择用法实例
May 14 Javascript
JavaScript实现标题栏文字轮播效果代码
Oct 24 Javascript
js代码延迟一定时间后执行一个函数的实例
Feb 15 Javascript
jQuery插件echarts实现的循环生成图效果示例【附demo源码下载】
Mar 04 Javascript
深入学习 JavaScript中的函数调用
Mar 23 Javascript
BootStrap+Mybatis框架下实现表单提交数据重复验证
Mar 23 Javascript
js调用设备摄像头的方法
Jul 19 Javascript
layui 点击重置按钮, select 并没有被重置的解决方法
Sep 03 Javascript
vue修改Element的el-table样式的4种方法
Sep 17 #Javascript
vue+canvas实现拼图小游戏
Sep 18 #Javascript
JavaScript 常见的继承方式汇总
Sep 17 #Javascript
JavaScript 闭包的使用场景
Sep 17 #Javascript
javascript贪吃蛇游戏设计与实现
Sep 17 #Javascript
js实现简单的随机点名器
Sep 17 #Javascript
谈谈JavaScript中的垃圾回收机制
Sep 17 #Javascript
You might like
ThinkPHP模板IF标签用法详解
2014/07/01 PHP
基于PHP实现的事件机制实例分析
2015/06/18 PHP
深入讲解PHP Session及如何保持其不过期的方法
2015/08/18 PHP
Linux下从零开始安装配置Nginx服务器+PHP开发环境
2015/12/21 PHP
浅谈PHP Cookie处理函数
2016/06/10 PHP
PHP7扩展开发教程之Hello World实现方法示例
2017/08/03 PHP
PHP实现数组转JSon和JSon转数组的方法示例
2018/06/14 PHP
可输入的下拉框
2006/06/19 Javascript
JQuery 学习笔记 选择器之一
2009/07/23 Javascript
JQuery 图片延迟加载并等比缩放插件
2009/11/09 Javascript
Javascript异步编程模型Promise模式详细介绍
2014/05/08 Javascript
jQuery图片切换插件jquery.cycle.js使用示例
2014/06/16 Javascript
javascript单例模式的简单实现方法
2015/07/25 Javascript
javascript基本数据类型及类型检测常用方法小结
2016/12/14 Javascript
angular中不同的组件间传值与通信的方法
2017/11/04 Javascript
koa+mongoose实现简单增删改查接口的示例代码
2019/05/13 Javascript
element-ui tree结构实现增删改自定义功能代码
2020/08/31 Javascript
利用 Chrome Dev Tools 进行页面性能分析的步骤说明(前端性能优化)
2021/02/24 Javascript
[04:19]完美世界携手游戏风云打造 卡尔工作室模型介绍篇
2013/04/24 DOTA
详解Python编程中包的概念与管理
2015/10/16 Python
Python smtplib实现发送邮件功能
2018/05/22 Python
python redis 删除key脚本的实例
2019/02/19 Python
Django框架搭建的简易图书信息网站案例
2019/05/25 Python
pandas的连接函数concat()函数的具体使用方法
2019/07/09 Python
Python爬虫使用浏览器cookies:browsercookie过程解析
2019/10/22 Python
pyinstaller打包单文件时--uac-admin选项不起作用怎么办
2020/04/15 Python
python mysql自增字段AUTO_INCREMENT值的修改方式
2020/05/18 Python
Python新手学习装饰器
2020/06/04 Python
matplotlib自定义鼠标光标坐标格式的实现
2021/01/08 Python
机械电子工程专业推荐信范文
2013/11/20 职场文书
《燕子专列》教学反思
2014/02/21 职场文书
中学生演讲稿
2014/04/26 职场文书
求职信如何撰写?
2019/05/22 职场文书
深入理解Vue的数据响应式
2021/05/15 Vue.js
mysql中DCL常用的用户和权限控制
2022/03/31 MySQL
SpringBoot全局异常处理方案分享
2022/05/25 Java/Android