Doubly Linked Lists

-Intro to Doubly Linked List
-Doubly Linked List: Push
-Doubly Linked List: Pop
-Doubly Linked List: Shift
-Doubly Linked List: Unshift


This content originally appeared on DEV Community and was authored by Code_Regina

                   -Intro to Doubly Linked List 
                   -Doubly Linked List: Push
                   -Doubly Linked List: Pop
                   -Doubly Linked List: Shift
                   -Doubly Linked List: Unshift
                   -Doubly Linked List: Get Intro
                   -Doubly Linked List: Set Intro
                   -Doubly Linked List: Insert Intro
                   -Doubly Linked List: Remove Intro
                   -Doubly Linked List: Reverse Intro
                   -Doubly Linked List: BIG O Complexity

Intro to Doubly Linked List

Doubly Linked List is a data structure that is similar to a singly linked list but doubly linked list adds an additional pointer to the previous node as well as the next node. Therefore each node will point in either direction.

Alt Text

There is no indexing.
There is an head and tail.

Doubly Linked List: Push


class Node{
    constructor(val){
        this.val = val;
        this.next = null;
        this.prev = null;
    }
}


class DoublyLinkedList {
    constructor(){
        this.head = null;
        this.tail = null;
        this.length = 0;
    }
    push(val){
        var newNode = new Node(val);
        if(this.length === 0){
            this.head = newNode;
            this.tail = newNode;
        } else {
            this.tail.next = newNode;
            newNode.prev = this.tail;
            this.tail = newNode;
        }
        this.length++;
        return this;
    }
}


Doubly Linked List: Pop


    pop(){
        if(!this.head) return undefined;
        var poppedNode = this.tail;
        if(this.length === 1){
            this.head = null;
            this.tail = null;
        } else {
            this.tail = poppedNode.prev;
            this.tail.next = null;
            poppedNode.prev = null;
        }
        this.length--;
        return poppedNode;
    }
}

Doubly Linked List: Shift


    shift(){
        if(this.length === 0) return undefined;
        var oldHead = this.head;
        if(this.length === 1){
            this.head = null;
            this.tail = null;
        }else{
            this.head = oldHead.next;
            this.head.prev = null;
            oldHead.next = null;
        }
        this.length--;
        return oldHead;
    }
}

Doubly Linked List: Unshift


    unshift(val){
        var newNode = new Node(val);
        if(this.length === 0) {
            this.head = newNode;
            this.tail = newNode;
        } else {
            this.head.prev = newNode;
            newNode.next = this.head;
            this.head = newNode;
        }
        this.length++;
        return this;
    }
}

Doubly Linked List: Get Intro



   get(index){
        if(index < 0 || index >= this.length) return null;
        var count, current;
        if(index <= this.length/2){
            count = 0;
            current = this.head;
            while(count !== index){
                current = current.next;
                count++;
            }
        } else {
            count = this.length - 1;
            current = this.tail;
            while(count !== index){
                current = current.prev;
                count--;
            }
        }
        return current;
    }
}

Doubly Linked List: Set Intro



    set(index, val){
        var foundNode = this.get(index);
        if(foundNode != null){
            foundNode.val = val;
            return true;
        }
        return false;
    }
}


Doubly Linked List: Insert Intro


    insert(index, val){
        if(index < 0 || index > this.length) return false;
        if(index === 0) return !!this.unshift(val);
        if(index === this.length) return !!this.push(val);

        var newNode = new Node(val);
        var beforeNode = this.get(index-1);
        var afterNode = beforeNode.next;

        beforeNode.next = newNode, newNode.prev = beforeNode;
        newNode.next = afterNode, afterNode.prev = newNode;
        this.length++;
        return true;
    }
}

Doubly Linked List: BIG O Complexity

Alt Text


This content originally appeared on DEV Community and was authored by Code_Regina


Print Share Comment Cite Upload Translate Updates
APA

Code_Regina | Sciencx (2021-10-01T23:24:58+00:00) Doubly Linked Lists. Retrieved from https://www.scien.cx/2021/10/01/doubly-linked-lists/

MLA
" » Doubly Linked Lists." Code_Regina | Sciencx - Friday October 1, 2021, https://www.scien.cx/2021/10/01/doubly-linked-lists/
HARVARD
Code_Regina | Sciencx Friday October 1, 2021 » Doubly Linked Lists., viewed ,<https://www.scien.cx/2021/10/01/doubly-linked-lists/>
VANCOUVER
Code_Regina | Sciencx - » Doubly Linked Lists. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2021/10/01/doubly-linked-lists/
CHICAGO
" » Doubly Linked Lists." Code_Regina | Sciencx - Accessed . https://www.scien.cx/2021/10/01/doubly-linked-lists/
IEEE
" » Doubly Linked Lists." Code_Regina | Sciencx [Online]. Available: https://www.scien.cx/2021/10/01/doubly-linked-lists/. [Accessed: ]
rf:citation
» Doubly Linked Lists | Code_Regina | Sciencx | https://www.scien.cx/2021/10/01/doubly-linked-lists/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.