# DS with JS — Linked Lists — II

## Data Structures with JavaScript — Chapter Two — Doubly Linked Lists

A doubly linked list is a linked data structure that consists of a set of sequentially linked records called

nodes. Each node contains two fields, called links, that are references to the previous and to the next node in the sequence of nodes.

⚠️If you wan’t to learn more about linked-listsclick here

## Before Proceeding further…

This post is continued from **DS with JS — Linked Lists****, **If you haven’t gone through that yet, make sure you do before proceeding further…

# Core

# ⚜️ The list

*Append**AppendAt**Remove**RemoveAt**Reverse**Swap**IsEmpty & Length**Traverse**Display**Search*

# Lets’ begin!!

❗

️All the code snippets you will see below are just Pseudo code. If you want to see working code — click here

## 🔅 Append

append(item){

letnode=newNode( item );if(!this.head) {

this.head=node;

this.tail=node;

}else{

node.prev=this.tail;

this.tail.next=node;

this.tail=node

}}

## 🔅 AppendAt

**appendAt**( **pos**, **item** ) **{**

**let** current **=** **this**.head;

**let** counter **=** 1;

**let** node **=** **new** Node( item );

**if**( pos **==** 0 ) {

**this**.head.prev **=** node

node.next **=** **this**.head

**this**.head **=** node

} **else** {

**while**(current) {

current **=** current.next;

**if**( counter **==** pos ) {

node.prev **=** current.prev

current.prev.next **=** node

node.next **=** current

current.prev **=** node

}

counter**++**

}

}

**}**

## 🔅 Remove

**remove**( **item** ) **{**

**let** current **=** **this**.head;

**while**( current ) {

**if**( current.data **===** item ) {

**if**( current **==** **this**.head **&&** current **==** **this**.tail ) {

**this**.head = *null*;

**this**.tail = *null*;

} **else** **if** ( current **==** **this**.head ) {

**this**.head **=** **this**.head.next

**this**.head.prev **=** *null*

} **else** **if** ( current **==** **this**.tail ) {

**this**.tail **=** **this**.tail.prev;

**this**.tail.next **=** *null*;

} **else** {

current.prev.next **=** current.next;

current.next.prev **=** current.prev;

}

}

current **=** current.next

}

**}**

## 🔅 RemoveAt

**removeAt**( **pos** ) {

**let** current **=** **this**.head;

**let** counter **=** 1;

**if**( pos **==** 0 ) {

**this**.head **=** **this**.head.next;

**this**.head.prev **=** *null*;

} **else** {

**while**( current ) {

current **=** current.next

**if** ( current **==** **this**.tail ) {

**this**.tail = **this**.tail.prev;

**this**.tail.next **=** *null*;

} **else** **if**( counter **==** pos ) {

current.prev.next **=** current.next;

current.next.prev **=** current.prev;

**break**;

}

counter**++**;

}

}

**}**

## 🔅 Reverse

**reverse**()**{**

**let** current **=** **this**.head;

**let** prev **=** *null*;

**while**( current ){

**let** next **=** current.next

current.next **=** prev

current.prev **=** next

prev **=** current

current **=** next

}

**this**.tail **=** **this**.head

**this**.head **=** prev

**}**

## 🔅 Swap

**swap**( **nodeOne**, **nodeTwo** ) **{**

**let** current **=** **this**.head;

**let** counter **=** 0;

**let** firstNode;

**while**( current **!==** null ) {

**if**( counter **==** nodeOne ){

firstNode **=** current;

} **else** **if**( counter **==** nodeTwo ) {

**let** temp **=** current.data;

current.data **=** firstNode.data;

firstNode.data **=** temp;

}

current **=** current.next;

counter**++**;

}

**return** **true**

**}**

## 🔅 IsEmpty & Length

length() {

letcurrent=this.head;

letcounter=0;

while( current!==null) {

counter++

current=current.next

}

returncounter;

}isEmpty(){

returnthis.length()<1}

## 🔅 Traverse

**traverse**( **fn** ) **{**

**let** current **=** **this**.head;

**while**( current **!==** *null* ) {

**fn**(current)

current **=** current.next;

}

**return** **true**;

**}**

## 🔅 TraverseReverse

**traverseReverse**( **fn** ) **{**

**let** current **=** **this**.tail;

**while**( current **!==** *null* ) {

**fn**(current)

current **=** current.prev;

}

**return** **true**;

**}**

## 🔅 Search

search(item){

letcurrent=this.head;

letcounter=0;while( current ) {

if( current.data==item ) {

returncounter

}

current=current.next

counter++

}

returnfalse;}

# About this post

This post is the second instalment to its series “**DS with JS**”. There will be more in this series. Next will be on **next Thursday Morning**. **Stay tuned!**

# That’s It

## Happy Coding !!

🎧 No music today… I lost something very important today…

*If you like this article, please give it some claps *👏* and share it! If you do not like this post or have any type of questions regarding anything that i mentioned in this post. Feel free to ask me. Just post an issue in my “**Ask Me Anything” **by **clicking here**.*

*For more like this, **follow me on Medium** or **Twitter**. To ask a Question **visit this link**. More about me on my **website**.*