JavaScript实现循环链表

2019-01-23 07:40:41来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

单链表地址:点我

一、循环链表

  节点的next指向下一个节点,节点的prev指向上一个节点

function loopList() {
	let length = 0,
		head = null,
		tail = null
	this.append = (data) => {
		let node = new Node(data),
			current
		if(head === null) {
			head = node
			tail = node
		}else {
			current = head
			while(current.next) {
				current = current.next
			}
			current.next = node
			tail = node
		}
		length ++
		return true
	}
	this.insert = (position, data) => {
		if(position > -1 && position <= length) {
			let node = new Node(data),
				current = head,
				previous
			if(position === 0) {
				if (!head) {
					head = node
					tail = node
				}else {
					node.next = current
					current.prev = node
					head = node
				}
			}
			else if(position === length) {
				current = tail
				current.next = node
				node.prev = current
				tail = node
			}
			else {
				while(index ++ < position) {
					previous = current
					current = current.next
				}
				previous.next = node
				node.prev = previous
				node.next = current
				current.prev = node 
			}
			length ++
			return true
		}else {
			return false
		}
	}
	this.removePos = 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.prev = null
	            }
	        }else if(position === length - 1) {
	            current = tail
	            tail = current.prev
	            tail.next = null
	        }else {
	            while (index++ < position) {
	                previous = current
	                current = current.next
	            }
	            //将previous与current的下一项链接起来,跳过current,从而移除它
	            previous.next = current.next
	            current.next.prev = previous
	        }
	        length --
	        return true
	    }else {
	        return false
	    }
	}
	this.removeData = (data) => {
		if(head === null) {
			return false
		}
		else {
			let current = head,
				previous,
				index = 0
			if (length === 1 ) {
				if (current.data !== data) {
                	return false
				}else {
					head = null
					tail = null
					length --
					return true
				}
			}

			
			while (index ++ < length && current.data !== data) {
				previous = current
				current = current.next
			}
			if(index === length) {
				current = tail
	            tail = current.prev
	            tail.next = null
	            length --
				return true
			}
			if(index > length) {
				return false
			}else {
				previous.next = current.next
				current.next.prev = previous
				length --
				return true
			}
		}
	}
	this.toString = () => {
		let resultStr = "",
			current,
			index = length
		if(head === null) {
			return ""
		}else {
			current = head
			while(index -- > 0) {
				resultStr += "," + current.data
				current = current.next
			}
			return resultStr.slice(1)
		}
	}
}

function Node(data) {
	this.data = data
	this.next = null
	this.prev = null
}

  


原文链接:https://www.cnblogs.com/detanx/p/JavaScriptloopList.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Vue单页面应用阻止浏览器记住密码

下一篇:199,一个被正则表达式遗忘的号码段?