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 相关文章推荐
找到一点可怜的关于dojo资料,谢谢作者!
Dec 06 Javascript
jquery.ui.progressbar 中文文档
Nov 26 Javascript
Prototype源码浅析 String部分(三)之HTML字符串处理
Jan 15 Javascript
利用百度地图JSAPI生成h7n9禽流感分布图实现代码
Apr 15 Javascript
jquery Ajax 实现加载数据前动画效果的示例代码
Feb 07 Javascript
js实现的奥运倒计时时钟效果代码
Dec 09 Javascript
Jquery技巧(必须掌握)
Mar 16 Javascript
jQuery过滤特殊字符及JS字符串转为数字
May 26 Javascript
利用forever和pm2部署node.js项目过程
May 10 Javascript
JavaScript树的深度优先遍历和广度优先遍历算法示例
Jul 30 Javascript
vue 公共列表选择组件,引用Vant-UI的样式方式
Nov 02 Javascript
Vant Weapp组件踩坑:picker的初始赋值解决
Nov 12 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
谈谈新手如何学习PHP
2006/12/23 PHP
在服务端进行目录建立、删除,文件上传、删除的过程的php代码
2008/09/10 PHP
php strlen mb_strlen计算中英文混排字符串长度
2009/07/10 PHP
php实现常见图片格式的水印和缩略图制作(面向对象)
2016/06/15 PHP
php运行报错Call to undefined function curl_init()的最新解决方法
2016/11/20 PHP
Yii2设置默认控制器的两种方法
2017/05/19 PHP
建立良好体验度的Web注册系统ajax
2007/07/09 Javascript
jQuery 树形结构的选择器
2010/02/15 Javascript
动态加载图片路径 保持JavaScript控件的相对独立性
2010/09/03 Javascript
js绑定事件this指向发生改变的问题解决方法
2013/04/23 Javascript
删除节点的jquery代码
2014/01/13 Javascript
Javascript中数组sort和reverse用法分析
2014/12/30 Javascript
JavaScript实现节点的删除与序号重建实例
2015/08/05 Javascript
深入学习JavaScript中的原型prototype
2015/08/13 Javascript
JavaScript中this详解
2015/09/01 Javascript
实例详解jQuery Mockjax 插件模拟 Ajax 请求
2016/01/12 Javascript
实例讲解JS中setTimeout()的用法
2016/01/28 Javascript
基于JavaScript判断浏览器到底是关闭还是刷新(超准确)
2016/02/01 Javascript
js将json格式的对象拼接成复杂的url参数方法
2016/05/25 Javascript
js判断iframe中元素是否存在的实现代码
2016/12/24 Javascript
在 Angular2 中实现自定义校验指令(确认密码)的方法
2017/01/23 Javascript
基于vuejs实现一个todolist项目
2017/04/11 Javascript
vuex如何重置所有state(可定制)
2019/01/17 Javascript
bootstrap Table实现合并相同行
2019/07/19 Javascript
在vue项目中引用Antv G2,以饼图为例讲解
2020/10/28 Javascript
python 实现矩阵按对角线打印
2019/11/29 Python
浅谈多卡服务器下隐藏部分 GPU 和 TensorFlow 的显存使用设置
2020/06/30 Python
python读写数据读写csv文件(pandas用法)
2020/12/14 Python
python如何发送带有附件、正文为HTML的邮件
2021/02/27 Python
StubHub墨西哥:购买和出售您的门票
2016/09/17 全球购物
波兰珠宝品牌:YES
2019/08/09 全球购物
应届毕业生个人求职信范文
2014/01/29 职场文书
行政办公室岗位职责
2014/03/18 职场文书
个人求职信范文
2014/05/24 职场文书
班子四风对照检查材料思想汇报
2014/09/29 职场文书
工作违纪的检讨书范文
2019/07/09 职场文书