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 相关文章推荐
jquery 缓存问题的几个解决方法
Nov 11 Javascript
javascript屏蔽右键代码
May 15 Javascript
实现图片预加载的三大方法及优缺点分析
Nov 19 Javascript
JavaScript forEach()遍历函数使用及介绍
Jul 08 Javascript
BootStrap初学者对弹出框和进度条的使用感觉
Jun 27 Javascript
关于jQuery.ajax()的jsonp碰上post详解
Jul 02 jQuery
node实现基于token的身份验证
Apr 09 Javascript
jQuery解析json格式数据示例
Sep 01 jQuery
vue删除html内容的标签样式实例
Sep 13 Javascript
解决vue项目nginx部署到非根目录下刷新空白的问题
Sep 27 Javascript
小程序点击图片实现自动播放视频
May 29 Javascript
JavaScript实现的级联算法示例【省市二级联动功能】
Dec 25 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
Yii2如何批量添加数据
2016/05/17 PHP
jQuery前台数据获取实现代码
2011/03/16 Javascript
js取消单选按钮选中示例代码
2013/11/14 Javascript
JavaScript中用getDate()方法返回指定日期的教程
2015/06/09 Javascript
全面解析多种Bootstrap图片轮播效果
2016/05/27 Javascript
jQuery实现点击后高亮背景固定显示的菜单效果【附demo源码下载】
2016/09/21 Javascript
微信小程序使用第三方库Immutable.js实例详解
2016/09/27 Javascript
基于jQuery实现选项卡效果
2017/01/04 Javascript
简单实现IONIC购物车功能
2017/01/10 Javascript
jquery中done和then的区别(详解)
2017/12/19 jQuery
NodeJs实现简单的爬虫功能案例分析
2018/12/05 NodeJs
ES6 如何改变JS内置行为的代理与反射
2019/02/11 Javascript
Django模板继承 extend标签实例代码详解
2019/05/16 Javascript
vue 动态给每个页面添加title、关键词和描述的方法
2020/08/28 Javascript
jQuery使用hide()、toggle()函数实现相机品牌展示隐藏功能
2021/01/29 jQuery
[01:43]深扒TI7聊天轮盘语音出处4
2017/05/11 DOTA
[01:10:27]DOTA2-DPC中国联赛正赛 SAG vs XG BO3 第二场 3月5日
2021/03/11 DOTA
从零学Python之入门(四)运算
2014/05/27 Python
Python装饰器原理与用法分析
2018/04/30 Python
浅谈pyqt5中信号与槽的认识
2019/02/17 Python
Python多版本开发环境管理工具介绍
2019/07/03 Python
python中用logging实现日志滚动和过期日志删除功能
2019/08/20 Python
Python内置方法实现字符串的秘钥加解密(推荐)
2019/12/09 Python
Python测试线程应用程序过程解析
2019/12/31 Python
Python Django2 model 查询介绍(条件、范围、模糊查询)
2020/03/16 Python
澳大利亚宠物食品和用品商店:PETstock
2020/01/02 全球购物
初三学习决心书
2014/03/11 职场文书
小学老师寄语大全
2014/04/04 职场文书
党员服务承诺书
2014/05/28 职场文书
蛋糕店创业计划书范文
2014/09/21 职场文书
毕业生就业推荐表自我评价
2015/03/02 职场文书
地雷战观后感
2015/06/09 职场文书
保护动物的宣传语
2015/07/13 职场文书
2016年万圣节活动个人总结
2016/04/05 职场文书
详解如何用Python实现感知器算法
2021/06/18 Python
python数据处理之Pandas类型转换
2022/04/28 Python