js链表

function LinkedList(){
	var Node = function(element){
		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){
				current = current.next;
			}
			current.next = node;
		}
		length++;
	};
	//在链表中增加元素
	this.insert = function(position, element){
		if(position>-1&&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;
				}
				previous.next = node;
				node.next = current;
			}
			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;
				}
				previous.next = current.next; 
			}
			length--;
			return current.element;
		}else{
			return null;
		}
	};
	//从列表中移除一项。
	this.remove = function(element){
		var index = this.indexOf(element);
		return this.removeAt(index);
	};
	//返回元素在列表中的索引。如果列表中没有该元素则返回 -1 
	this.indexOf = function(element){
		var current = head,index = 0;
		while(current){
			if(element == current.element){
				return index;
			}
			current = current.next;
			index++;
		}
		return -1;
	};
	//如果链表中不包含任何元素,返回 true ,如果链表长度大于0则返回 false 
	this.isEmpty = function() {
		return length === 0;
	};
	//返回链表包含的元素个数。与数组的 length 属性类似。
	this.size = function() {
		return length;
	};
	//由于列表项使用了 Node 类,就需要重写继承自JavaScript对象默认的
	this.toString = function(){
		var current = head,string = '';
		while(current){
			string = current.element;
			current = current.next;
		}
		return string;
	};
	this.getHead = function(){
		return head;
	};
	//
	this.print = function(){
		var current = head,previous,index=0,items = [];
		if(length===0){
			return null;
		}else{
			while(current){
				items.push(current.element);
				console.log(current.element);
				current = current.next;
			}
			console.log(items);
			return items;
		}
	};
	
}

function DoublyLinkedList() {
	var Node = function(element){
		this.element = element;
		this.pre = null;
		this.next = null;
	}
	var length = 0;
	var head = null;
	var tail = null; //新增的
	
	this.insert = function(position, element){
		if(position>-1&&position<length){
			var node = new Node(element), current = head,previous,index = 0;
			if(position === 0){
				if(!head){
					head = node;
					tail = node;
				}else{
					node.next = current;
					current.pre = node;
					node = head;
				}
			}else if(position === length){
				current = tail;
				current.next = node;
				node.pre = current;
				tail = node;
			}else{
				while(index++<position){
					previous = current;
					current = current.next;
				}
				node.pre = previous;
				previous.next = node;
				node.next = current.next;
			}
			return true;
		}
		return false;
	}
	this.removeAt = function(position){
		//检查越界值
		if (position > -1 && position < length){
			var current = head,previous,index = 0;
			if(position === 0){
				head = current.next;
				if(length === 1){
					tail = null;
				}else{
					head.pre = null;
				}
					
			}else if(position === length){
				current = tail;
				tail = current.pre;
				tail.next = null;
			}else{
				while(index++ position){
					previous = current;
					current = current.next;
				}
				previous.next = current.next;
				current.next.pre = previous;
			}
			length--;
			return current.element;
		}
		return null;
	}
}	

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值