JavaScript数据结构与算法(四):双向链表

function BiLinkedList(){

    function Node(ele) {  
        this.element = ele;
        this.next = null;
        this.prev = null;
    }
    var length = 0;
    var head = null;
    var tail = null;
    /**
     * 
     * @param pos:指定插入元素的位置
     * @param ele:插入的元素
     * @return 成功插入:true;失败:false 
     */ 
    this.insert = function (pos, ele) {  
        if(pos > - 1 && pos < length) {
            var new_node = new Node(ele);
            var current = head, previous = null, index = 0;
            if(pos === 0) {
                if(!head) {
                    head = new_node;
                    tail = new_node;
                } else {
                    new_node.next = current;
                    current.prev = new_node;
                    head = new_node;
                }
            } else if(pos == length) {
                current = tail;
                current.next = new_node;
                new_node.prev = current;
                tail = new_node;
            } else {
                while(index < pos) {
                    previous = current;
                    current = current.next;
                    index++;
                }
                new_node.next = current;
                new_node.prev = previous;
            }
            length++;
            return true;
        } else{
            return false;
        }
    }
    /**
     * 
     * @param {} pos:指定删除的元素位置
     * @return 被删除的元素 
     */ 
    this.removeAt = function (pos) {  
        if(pos > -1 && pos < length) {
            var current = head, previous, index = 0;
            if(pos === 0) {
                head = current.next;
                if(length == 1) {
                    tail = null;
                } else {
                    head.prev = null;
                }

            } else if(pos === length-1) {
                tail = tail.prev;
                tail.next = null;
            } else {
                while(index < pos) {
                    previous = current;
                    current = current.next;
                    index++;
                }
                previous.next = current.next;
                current.next.prev = previous;
            }
            length--;
            return current.element;
        } else {
            return null;
        }
    }
    /**
     * 其他方法...
     */
    function size() {
        return length;
      } 

}

module.exports = CircleLinkedList;

猜你喜欢

转载自blog.csdn.net/w_bu_neng_ku/article/details/80622967