首页 > 编程语言 > 详细

使用javaScript实现一个双端链表

时间:2020-06-30 12:00:49      阅读:62      评论:0      收藏:0      [点我收藏+]

这个双端链表继承了单链表的一些属性,详情请见:https://www.cnblogs.com/MySweetheart/p/13212220.html

1.创建一个双端节点

class DoublyNode extends Node{
    constructor(element,next,prev){
        super(element,next);
        this.prev = prev;
    }
}

2.创建一个双端链表类

class DoublyLinkedList extends LinkedList{
    constructor(equalsFn = defaultEquals){
        super(equalsFn);
        this.tail = undefined;
    }
}

3.由于继承了单链表的一些方法,所以这里就重写了一些方法

3.1添加元素

    push(element){
        let node = new DoublyNode(element);
        if(this.head == undefined){
            this.head = node;
            this.tail = node;
        }else{
            this.tail.next = node;
            node.prev = this.tail;
            this.tail = node;
        }
        this.count++;
    }

3.2指定位置添加元素

 insert(element,position){
        if(position >= 0 && position <= this.count){
            let node = new DoublyNode(element);
            if(position === 0){
                if(this.count == 0){
                    this.head = node;
                    this.tail = node;
                }else{
                    let current =this.head;
                    node.next = current;
                    current.prev = node;
                    this.head = node;
                }
            }else if(position === this.count){
                this.tail.next = node;
                node.prev = this.tail;
                this.tail = node;
            }else{
                let current = this.getElementAt(position);
                node.next = current;
                current.prev.next = node;
                node.prev = current.prev;
                current.prev = node;
            }
            this.count++;
        }
        return ‘position is null‘;
    }

3.3删除指定位置的元素

    removeAt(index){
        if(this.isEmpty()) return ‘linkedlist is null‘;
        if(index >= 0 && index < this.count){
            if(index === 0){
                if(this.count === 1){
                    this.head = undefined;
                    this.tail = undefined;
                }else{
                   let current = this.head.next;
                   this.head = current;
                }
            }else if(index === this.count-1){
                this.tail = this.tail.prev;
            }else{
                let current = this.getElementAt(index);
                current.prev.next = current.next;
                current.next.prev = current.prev;
            }
            this.count--;
        }
        return ‘index out of range‘;
    }

4.完整代码

class DoublyNode extends Node{
    constructor(element,next,prev){
        super(element,next);
        this.prev = prev;
    }
}
class DoublyLinkedList extends LinkedList{
    constructor(equalsFn = defaultEquals){
        super(equalsFn);
        this.tail = undefined;
    }
    push(element){
        let node = new DoublyNode(element);
        if(this.head == undefined){
            this.head = node;
            this.tail = node;
        }else{
            this.tail.next = node;
            node.prev = this.tail;
            this.tail = node;
        }
        this.count++;
    }
    insert(element,position){
        if(position >= 0 && position <= this.count){
            let node = new DoublyNode(element);
            if(position === 0){
                if(this.count == 0){
                    this.head = node;
                    this.tail = node;
                }else{
                    let current =this.head;
                    node.next = current;
                    current.prev = node;
                    this.head = node;
                }
            }else if(position === this.count){
                this.tail.next = node;
                node.prev = this.tail;
                this.tail = node;
            }else{
                let current = this.getElementAt(position);
                node.next = current;
                current.prev.next = node;
                node.prev = current.prev;
                current.prev = node;
            }
            this.count++;
        }
        return ‘position is null‘;
    }
    removeAt(index){
        if(this.isEmpty()) return ‘linkedlist is null‘;
        if(index >= 0 && index < this.count){
            if(index === 0){
                if(this.count === 1){
                    this.head = undefined;
                    this.tail = undefined;
                }else{
                   let current = this.head.next;
                   this.head = current;
                }
            }else if(index === this.count-1){
                this.tail = this.tail.prev;
            }else{
                let current = this.getElementAt(index);
                current.prev.next = current.next;
                current.next.prev = current.prev;
            }
            this.count--;
        }
        return ‘index out of range‘;
    }
}

5.结果

技术分享图片

使用javaScript实现一个双端链表

原文:https://www.cnblogs.com/MySweetheart/p/13212702.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!