• JavaScript实现循环链表


    单链表地址:点我

    一、循环链表

      节点的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
    }
    

      

  • 相关阅读:
    实现LNMP
    iptabes的用法
    实现LAMP
    实现https
    硬盘信息和磁盘分区管理
    awk
    【BZOJ 2288】 2288: 【POJ Challenge】生日礼物 (贪心+优先队列+双向链表)
    【BZOJ 1150】 1150: [CTSC2007]数据备份Backup (贪心+优先队列+双向链表)
    【BZOJ 1216】 1216: [HNOI2003]操作系统 (模拟+优先队列)
    【BZOJ 1528】 1528: [POI2005]sam-Toy Cars (贪心+堆)
  • 原文地址:https://www.cnblogs.com/detanx/p/JavaScriptloopList.html
Copyright © 2020-2023  润新知