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 相关文章推荐
Code:findPosX 和 findPosY
Dec 20 Javascript
javascript之dhDataGrid Ver2.0.0代码
Jul 01 Javascript
ASP.NET jQuery 实例18 通过使用jQuery validation插件校验DropDownList
Feb 03 Javascript
jQuery的slideToggle方法实例
May 07 Javascript
使用简洁的jQuery方法实现隔行换色功能
Jan 02 Javascript
点击按钮自动加关注的代码(sina微博/QQ空间/人人网/腾讯微博)
Jan 02 Javascript
js判断浏览器版本以及浏览器内核的方法
Jan 20 Javascript
JS实现slide文字框缩放伸展效果代码
Nov 05 Javascript
JS实现按比例缩放图片的方法(附C#版代码)
Dec 08 Javascript
javascript使用 concat 方法对数组进行合并的方法
Sep 08 Javascript
JS实现仿微信支付弹窗功能
Jun 25 Javascript
JS实现长图上下滚动效果
Mar 19 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 全局变量范围分析
2009/08/07 PHP
PHP获取搜索引擎关键字来源的函数(支持百度和谷歌等搜索引擎)
2012/10/03 PHP
封装ThinkPHP的一个文件上传方法实例
2014/10/31 PHP
php 使用array函数实现分页
2015/02/13 PHP
基于php实现七牛抓取远程图片
2015/12/01 PHP
PHP isset()与empty()的使用区别详解
2017/02/10 PHP
javascript代码加载优化方法
2011/01/30 Javascript
30个最佳jQuery Lightbox效果插件分享
2011/04/11 Javascript
jquery ajax请求实例深入解析
2012/11/26 Javascript
js实现拖拽效果
2015/02/12 Javascript
jQuery实现图像旋转动画效果
2016/05/29 Javascript
jQuery旋转插件jqueryrotate用法详解
2016/10/13 Javascript
原生js实现弹出层登录拖拽功能
2016/12/05 Javascript
Node.js和Express简单入门介绍
2017/03/24 Javascript
Python版实现微信公众号扫码登陆
2020/05/28 Javascript
vue 清空input标签 中file的值操作
2020/07/21 Javascript
微信小程序实现点击导航条切换页面
2020/11/19 Javascript
[02:32]“虐狗”镜头慎点 2016国际邀请赛中国区预选赛现场玩家采访
2016/06/28 DOTA
Python库urllib与urllib2主要区别分析
2014/07/13 Python
python使用mysql数据库示例代码
2017/05/21 Python
python书籍信息爬虫实例
2018/03/19 Python
Tensorflow 训练自己的数据集将数据直接导入到内存
2018/06/19 Python
flask中的wtforms使用方法
2018/07/21 Python
Python自动发送邮件的方法实例总结
2018/12/08 Python
python 3.3 下载固定链接文件并保存的方法
2018/12/18 Python
Django ORM 自定义 char 类型字段解析
2019/08/09 Python
keras 模型参数,模型保存,中间结果输出操作
2020/07/06 Python
Python request post上传文件常见要点
2020/11/20 Python
CSS3属性box-shadow使用详细教程
2012/01/21 HTML / CSS
英国首屈一指的票务公司:See Tickets
2019/05/11 全球购物
法学专业个人求职信
2013/09/26 职场文书
中职生自荐信范文
2014/06/15 职场文书
会计专业毕业生求职信
2014/07/04 职场文书
八一建军节营销活动方案
2014/08/31 职场文书
迁徙的鸟观后感
2015/06/09 职场文书
学雷锋广播稿大全
2015/08/19 职场文书