js-实现单向链表

单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始。
javascript实现单向链表代码如下:
function LinkedList() {
	var Node = function (element) {	//表示要加入列表的项,next属性指向下一个节点项的指针
		this.element = element;
		this.next = null;
	};
	var length = 0;
	var head = null;	//存储第一个节点的引用
	this.append = function (element) {
		var node = new Node(element),
			current;
		if (head === null) {//如果为空链表
			head = node;
		} else {
			current = head;
			while (current.next) {//while循环寻找最后元素
				current = current.next;
			}
			current.next = node;
		}
		length++;//更新列表的长度
	};
	this.insert = function (position, element) {//在任意一个位置插入一个元素,position为位置,element为元素
		//检查越界值
		if (position >= 0 && position <= length) {
			var node = new Node(element),
				current = head,
				previous,
				index = 0;
			if (position === 0) {//在第一个位置添加
				node.next = current;
				head = node;
			} else {
				while (index++ < position) {
					previous = current;
					current = current.next;
				}
				node.next = current;
				previous.next = node;
			}
			length++;
			return true;
		}
		else {
			return false;
		}
	};
	this.removeAt = function (position) {//移除指定位置的元素
		if (position > -1 && position < length) {
			var current = head,
				previous,
				index = 0;
			if (position === 0) {
				head = current.next;
			} else {
				while (index++ < position) {
					previous = current;
					current = current.next;
				}
				length--;
				return current.element;
			}

		} else {
			return null;
		}
	};
	this.remove = function (element) {//移除某元素
		var index = this.indexOf(element);
		return this.removeAt(index);
	};
	this.indexOf = function (element) {//是否包含某元素,返回所在位置
		var current = head,
			index = -1;
		while (current) {
			index++;
			if (element === current.element) {
				return index;
			}
			current = current.next;
		}
		return -1;
	};
	this.isEmpty = function () {//检查链表是否为空
		return length === 0;
	};
	this.size = function () {//返回链表的长度
		return length;
	};
	this.toString = function () {//输出链表中的值
		var current = head,
			string = '';
		while (current) {
			string += current.element + " ";
			current = current.next;
		}
		return string;
	};
	this.getHead = function () {//获得head
		return head;
	};
}
var list = new LinkedList();
list.append(15);
list.append(8);
list.append(12);
list.append(10);
list.append(6);
console.log("链表是否为空?" + list.isEmpty());
console.log("链表长度:" + list.size());
console.log(list.toString());
console.log(list.indexOf(10));


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值