All Articles

Make a Linked list-JS的雙向鏈結

const DoubleLinked = function () {
    const Node = function (element) {
        this.element = element;
        this.next = null;
        this.prev = null;
    }
    let length = 0;
    let head, tail;

    this.insert = (position, element) => {
        if (position > -1 && position <= length) {
            let node = new Node(element);
            let current = head;
            let previous;
            let index = 0;
            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 head;
        } else {
            return false;
        }

    }
    this.removeAt = (position) => {
        let current = head;
        let previous;
        let index = 0;
        
        if (position > -1 && position <= length) {
            if (position === 0) {
                head = current.next;
                head.prev = null;
            }else if (position === length){
                tail = tail.prev;
                tail.next = null;
            }else{
                while(index++{
        return head;
    }
    this.toString = ()=>{
        let string = '';
        let current = head;
        while(current){
            string+=current.element;
            current = current.next;
        }
        return string;
    };
    this.indexOf = (element)=>{
        let index = 0;
        let current = head
        while(current){
            index++;
            if(current.element===element){
                return index;
            }
            current = current.next;
        }
        return false;
    }
    this.remove = (element) => {
        let index = this.indexOf(element);
        return this.removeAt(index);
    }
    this.append = (element) => {
        const node = new Node(element);
        let current = head;
        if(head===null){
            head = node;
            tail = node;
        }else{
            tail.next = node;
            node.prev = tail;
            tail = node;
        }
        length++;
        return tail;
    }
}
const DL = new DoubleLinked();
DL.insert(0,"Hi");
DL.append("Im");
DL.insert(2,"Eddie");
console.log(DL.toString());
DL.removeAt(0);
console.log(DL.toString());
console.log(DL.getHead());
Published 27 Jul 2017