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实现页面实时显示当前时间的简单实例
Jul 20 Javascript
jquery实现向下滑出的二级导航下滑菜单效果
Aug 25 Javascript
举例说明JavaScript中的实例对象与原型对象
Mar 11 Javascript
Angularjs在初始化未完毕时出现闪烁问题的解决方法分析
Aug 05 Javascript
js带闹铃功能的倒计时代码
Sep 29 Javascript
JS判断键盘是否按的回车键并触发指定按钮点击操作的方法
Feb 13 Javascript
Angular将填入表单的数据渲染到表格的方法
Sep 22 Javascript
vue组件实现进度条效果
Jun 06 Javascript
angular6.0开发教程之如何安装angular6.0框架
Jun 29 Javascript
Vue 后台管理类项目兼容IE9+的方法示例
Feb 20 Javascript
JS用最简单的方法实现四舍五入
Aug 27 Javascript
快速解决vue2+vue-cli3项目ie兼容的问题
Nov 17 Vue.js
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下尝试使用GraphicsMagick的缩略图功能
2011/01/01 PHP
php实现简单洗牌算法
2013/06/18 PHP
PHP二进制与字符串之间的相互转换教程
2016/10/14 PHP
Jquery Ajax.ashx 高效分页实现代码
2009/10/20 Javascript
js中prototype用法详细介绍
2013/11/14 Javascript
jQuery过滤选择器用法分析
2015/02/10 Javascript
angularjs中ng-attr的用法详解
2016/12/31 Javascript
js 递归和定时器的实例解析
2017/02/03 Javascript
JavaScript 字符串数字左补位,右补位,取固定长度,截位扩展函数代码
2017/03/25 Javascript
微信小程序开发之toast等弹框提示使用教程
2017/06/08 Javascript
javaScript产生随机数的用法小结
2018/04/21 Javascript
微信小程序实现刷脸登录
2018/05/25 Javascript
解决eclipse中没有js代码提示的问题
2018/10/10 Javascript
vue实现密码显示与隐藏按钮的自定义组件功能
2019/04/23 Javascript
微信小程序image图片加载完成监听
2019/08/31 Javascript
vue多个元素的样式选择器问题
2019/11/29 Javascript
React学习之JSX与react事件实例分析
2020/01/06 Javascript
json_decode 索引为数字时自动排序问题解决方法
2020/03/28 Javascript
git使用.gitignore设置不生效或不起作用问题的解决方法
2017/06/01 Python
Django后台获取前端post上传的文件方法
2018/05/28 Python
对numpy中shape的深入理解
2018/06/15 Python
在Python中输入一个以空格为间隔的数组方法
2018/11/13 Python
python实现两个一维列表合并成一个二维列表
2019/12/02 Python
Python数据可视化:饼状图的实例讲解
2019/12/07 Python
python按照list中字典的某key去重的示例代码
2020/10/13 Python
Kipling意大利官网:世界著名的时尚休闲包袋品牌
2019/06/05 全球购物
如何理解委托
2012/01/06 面试题
大学生军训广播稿
2014/01/24 职场文书
优秀教师事迹简介
2014/02/02 职场文书
2014年社区庆元旦活动方案
2014/03/08 职场文书
保险公司年会主持词
2014/03/22 职场文书
大学生就业自荐书
2014/06/16 职场文书
环境保护建议书
2014/08/26 职场文书
实习生个人总结范文
2015/02/28 职场文书
学校党员干部承诺书
2015/05/04 职场文书
python 单机五子棋对战游戏
2022/04/28 Python