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中实现函数数组的方法
Dec 25 Javascript
javascript得到当前页的来路即前一页地址的方法
Feb 18 Javascript
extjs 时间范围选择自动判断的实现代码
Jun 24 Javascript
Jquery日期选择datepicker插件用法实例分析
Jun 08 Javascript
jquery根据td给相同tr下其他td赋值的实现方法
Oct 05 Javascript
深入浅析AngularJS中的一次性数据绑定 (bindonce)
May 11 Javascript
使用jQuery实现两个div中按钮互换位置的实例代码
Sep 21 jQuery
红黑树的插入详解及Javascript实现方法示例
Mar 26 Javascript
微信小程序页面间传值与页面取值操作实例分析
Apr 30 Javascript
React 全自动数据表格组件——BodeGrid的实现思路
Jun 12 Javascript
VUE单页面切换动画代码(全网最好的切换效果)
Oct 31 Javascript
浅谈vue在html中出现{{}}的原因及解决方式
Nov 16 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导出Word文档的原理和实例
2013/10/21 PHP
PHP使用GIFEncoder类生成的GIF动态图片验证码
2014/07/01 PHP
WordPress中限制非管理员用户在文章后只能评论一次
2015/12/31 PHP
javascript 在网页中的运用(asp.net)
2009/11/23 Javascript
jquery ajax学习笔记2 使用XMLHttpRequest对象的responseXML
2011/10/16 Javascript
基于jquery的可多选的下拉列表框
2012/07/20 Javascript
Js 时间函数getYear()的使用问题探讨
2013/04/01 Javascript
从jquery的过滤器.filter()方法想到的
2013/09/29 Javascript
jQuery中使用Ajax获取JSON格式数据示例代码
2013/11/26 Javascript
jQuery中:last-child选择器用法实例
2014/12/31 Javascript
JS模拟键盘打字效果的方法
2015/08/05 Javascript
js类式继承与原型式继承详解
2016/04/07 Javascript
在IE8上JS实现combobox支持拼音检索功能
2016/05/23 Javascript
用JS实现简单的登录验证功能
2017/07/28 Javascript
JavaScript创建对象方法实例小结
2018/09/03 Javascript
小程序两种滚动公告栏的实现方法
2019/09/17 Javascript
基于javascript实现贪吃蛇小游戏
2019/11/25 Javascript
python 正则式 概述及常用字符
2009/05/07 Python
在Python3中使用asyncio库进行快速数据抓取的教程
2015/04/02 Python
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
2018/01/04 Python
Python数据分析之双色球基于线性回归算法预测下期中奖结果示例
2018/02/08 Python
浅谈Django的缓存机制
2018/08/23 Python
Python大数据之从网页上爬取数据的方法详解
2019/11/16 Python
使用Rasterio读取栅格数据的实例讲解
2019/11/26 Python
python打印异常信息的两种实现方式
2019/12/24 Python
Django自定义全局403、404、500错误页面的示例代码
2020/03/08 Python
利用canvas实现图片下载功能来实现浏览器兼容问题
2019/05/31 HTML / CSS
台湾乐天市场:日本No.1的网路购物网站
2017/03/22 全球购物
一份婚庆公司创业计划书
2014/01/11 职场文书
《小小雨点》教学反思
2014/02/18 职场文书
房产继承公证书
2014/04/09 职场文书
实训报告范文大全
2014/11/04 职场文书
2015年村党支部工作总结
2015/04/30 职场文书
3招让你摆脱即兴讲话冷场尴尬
2019/08/08 职场文书
SpringDataJPA在Entity中常用的注解介绍
2021/12/06 Java/Android
Nginx虚拟主机的配置步骤过程全解
2022/03/31 Servers