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 相关文章推荐
JavaScript 工具库 Cloudgamer JavaScript Library v0.1 发布
Oct 29 Javascript
jquery封装的对话框简单实现
Jul 21 Javascript
JS禁用浏览器退格键实现思路及代码
Oct 29 Javascript
JS读取XML文件示例代码
Nov 15 Javascript
当鼠标滑过文本框自动选中输入框内容的JS代码分享
Nov 26 Javascript
利用JQuery写一个简单的异步分页插件
Mar 07 Javascript
纯js和css完成贪吃蛇小游戏demo
Sep 01 Javascript
vue router2.0二级路由的简单使用
Jul 05 Javascript
优雅的处理vue项目异常实战记录
Jun 05 Javascript
Ant Design Pro 下实现文件下载的实现代码
Dec 03 Javascript
Vue中使用Echarts仪表盘展示实时数据的实现
Nov 01 Javascript
解决vue项目中遇到 Cannot find module ‘chalk‘ 报错的问题
Nov 05 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 spl_autoload_register实现自动加载研究
2011/12/06 PHP
PHP中如何判断AJAX提交的数据
2012/02/05 PHP
php Hex RGB颜色值互换的使用
2013/05/10 PHP
SyntaxHighlighter代码加色使用方法
2008/09/07 Javascript
js自动下载文件到本地的实现代码
2013/04/28 Javascript
返回顶部按钮响应滚动且动态显示与隐藏
2014/10/14 Javascript
jQuery异步上传文件插件ajaxFileUpload详细介绍
2015/05/19 Javascript
jquery使用经验小结
2015/05/20 Javascript
关于JSON与JSONP简单总结
2016/08/16 Javascript
Bootstrap Navbar Component实现响应式导航
2016/10/08 Javascript
jQuery如何解决IE输入框不能输入的问题
2016/10/08 Javascript
js中class的点击事件没有效果的解决方法
2016/10/13 Javascript
JS控制div跳转到指定的位置的几种解决方案总结
2016/11/05 Javascript
jQuery 表单序列化实例代码
2017/06/11 jQuery
详解VUE2.X过滤器的使用方法
2018/01/11 Javascript
layui中使用jquery控制radio选中事件的示例代码
2018/08/15 jQuery
利用原生JavaScript实现造日历轮子实例代码
2019/05/08 Javascript
原生js实现贪食蛇小游戏的思路详解
2019/11/26 Javascript
[04:04]DOTA2亚洲邀请赛比赛场馆&酒店全攻略
2017/03/23 DOTA
举例介绍Python中的25个隐藏特性
2015/03/30 Python
Python使用numpy实现BP神经网络
2018/03/10 Python
Python读取txt某几列绘图的方法
2018/10/14 Python
Python基础之高级变量类型实例详解
2020/01/03 Python
Python无头爬虫下载文件的实现
2020/04/02 Python
浅谈keras2 predict和fit_generator的坑
2020/06/17 Python
Prototype如何为一个Ajax添加一个参数
2015/12/06 面试题
怎样有效的进行自我评价
2013/10/06 职场文书
国际贸易专业个人职业生涯规划
2014/02/15 职场文书
办公自动化毕业生求职信
2014/03/09 职场文书
工作决心书
2014/03/11 职场文书
幼儿园中班评语大全
2014/04/17 职场文书
地理信息科学专业推荐信
2014/09/08 职场文书
学校组织向国旗敬礼活动方案(中小学适用)
2014/09/27 职场文书
党干部专题民主生活会对照检查材料思想汇报
2014/10/06 职场文书
2016优秀毕业生个人事迹材料
2016/02/29 职场文书
python机器学习实现oneR算法(以鸢尾data为例)
2022/03/03 Python