# Doubly Linked Lists – DEV Community ``````                   -Intro to Doubly Linked List
-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.

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

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

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

``````

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

``````

``````
shift(){
if(this.length === 0) return undefined;
if(this.length === 1){
this.tail = null;
}else{
}
this.length--;
}
}

``````

``````
unshift(val){
var newNode = new Node(val);
if(this.length === 0) {
this.tail = newNode;
} else {
}
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;
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  