File tree Expand file tree Collapse file tree 1 file changed +226
-0
lines changed Expand file tree Collapse file tree 1 file changed +226
-0
lines changed Original file line number Diff line number Diff line change 1+ /*  
2+     insertAtTail (val) 
3+     insertAtHead (val) 
4+     deleteAtTail () 
5+     deleteAtHead () 
6+     getLength () 
7+     print () 
8+     getAtIdx (idx) 
9+     putAtIdx (val, idx) 
10+     deleteAtIdx (idx) 
11+     search (val) 
12+     toArray () 
13+     reverse () 
14+ */ 
15+ 
16+ class  Node  { 
17+     constructor ( val )  { 
18+         this . val  =  val 
19+         this . next  =  null 
20+     } 
21+ } 
22+ 
23+ class  LinkedList  { 
24+     constructor ( )  { 
25+         this . head  =  null 
26+         this . tail  =  null 
27+         this . length  =  0 
28+     } 
29+ 
30+     insertAtTail ( val )  { 
31+         const  node  =  new  Node ( val ) 
32+ 
33+         if  ( ! this . head )  { 
34+             this . head  =  node 
35+             this . tail  =  node 
36+             this . length ++ 
37+         }  else  { 
38+             this . tail . next  =  node 
39+             this . tail  =  node 
40+             this . length ++ 
41+         } 
42+     } 
43+ 
44+     insertAtHead ( val )  { 
45+         const  node  =  new  Node ( val ) 
46+ 
47+         if  ( ! this . head )  { 
48+             this . head  =  node 
49+             this . tail  =  node 
50+             this . length ++ 
51+         }  else  { 
52+             node . next  =  this . head 
53+             this . head  =  node 
54+             this . length ++ 
55+         } 
56+     } 
57+ 
58+     print ( )  { 
59+         if  ( this . length  ===  0 )  console . log  ( "Empty Linked List!" ) 
60+         else  { 
61+             let  curr  =  this . head 
62+             let  str  =  '' 
63+ 
64+             while  ( curr )  { 
65+                 str  +=  curr . val  +  ' -> ' 
66+                 curr  =  curr . next 
67+             } 
68+ 
69+             console . log ( str  +  'null' ) 
70+         } 
71+     } 
72+ 
73+     deleteAtTail ( )  { 
74+         if  ( ! this . head )  console . log ( "Empty Linked List!" ) 
75+ 
76+         else  { 
77+             let  curr  =  this . head 
78+             let  prev  =  this . head 
79+ 
80+             while  ( curr . next )  { 
81+                 prev  =  curr 
82+                 curr  =  curr . next 
83+             } 
84+ 
85+             prev . next  =  null 
86+             this . tail  =  prev 
87+             this . length -- 
88+         } 
89+     } 
90+ 
91+     deleteAtHead ( )  { 
92+         if  ( ! this . head )  console . log ( "Empty Linked List!" ) 
93+ 
94+         else  { 
95+             let  curr  =  this . head 
96+             this . head  =  curr . next 
97+             this . length -- 
98+         } 
99+     } 
100+ 
101+ 
102+     getLength ( )  { 
103+         return  this . length 
104+     } 
105+ 
106+     getAtIdx  ( idx )  { 
107+         if  ( idx  >=  this . length  ||  idx  <  0 )  throw  new  Error  ( "Index out of bounds" ) 
108+ 
109+         else  { 
110+             let  currIdx  =  0 
111+             let  curr  =  this . head 
112+ 
113+             while  ( currIdx  <  idx )  { 
114+                 currIdx ++ 
115+                 curr  =  curr . next 
116+             } 
117+ 
118+             return  curr . val 
119+         }  
120+     } 
121+ 
122+     putAtIdx  ( val ,  idx )  { 
123+         if  ( idx  >  this . length  ||  idx  <  0 )  throw  new  Error  ( "Index out of bounds" ) 
124+ 
125+         const  node  =  new  Node  ( val ) 
126+ 
127+         if  ( ! this . head )  { 
128+             this . head  =  node 
129+             this . length ++ 
130+             return 
131+         } 
132+ 
133+         let  currIdx  =  0 
134+         let  curr  =  this . head 
135+         let  prev  =  this . head 
136+ 
137+         while  ( currIdx  <  idx )  { 
138+             currIdx ++ 
139+             prev  =  curr 
140+             curr  =  curr . next 
141+         } 
142+ 
143+         prev . next  =  node 
144+         node . next  =  curr 
145+         this . length ++ 
146+     } 
147+ 
148+     deleteAtIdx  ( idx )  { 
149+         if  ( idx  >=  this . length  ||  idx  <  0 )  throw  new  Error  ( "Index out of bounds" ) 
150+ 
151+         else  { 
152+             let  currIdx  =  0 
153+             let  curr  =  this . head 
154+             let  prev  =  this . head 
155+ 
156+             while  ( currIdx  <  idx )  { 
157+                 currIdx ++ 
158+                 prev  =  curr 
159+                 curr  =  curr . next 
160+             } 
161+ 
162+             prev . next  =  curr . next 
163+             this . length -- 
164+         } 
165+     } 
166+ 
167+     search  ( val )  { 
168+         if  ( ! this . head )  return  "Empty Linked List!" 
169+         if  ( ! this . head . next  &&  this . head . val  !==  val )  return  null 
170+         if  ( ! this . head . next  &&  this . head . val  ===  val )  return  0 
171+         
172+         let  currIdx  =  0 
173+         let  curr  =  this . head 
174+ 
175+         while  ( curr )  { 
176+             if  ( curr . val  ===  val )  return  currIdx 
177+             currIdx ++ 
178+             curr  =  curr . next 
179+         } 
180+ 
181+         return  null 
182+     } 
183+ 
184+     toArray  ( )  { 
185+         const  arr  =  [ ] 
186+         if  ( ! this . head )  return  null 
187+ 
188+         let  curr  =  this . head 
189+ 
190+         while  ( curr )  { 
191+             arr . push  ( curr . val ) 
192+             curr  =  curr . next 
193+         } 
194+ 
195+         return  arr 
196+     } 
197+ 
198+     reverse  ( )  { 
199+         if  ( ! this . head )  throw  new  Error  ( "Empty Linked List" ) 
200+         if  ( ! this . head . next )  return 
201+ 
202+         let  prev  =  null 
203+         let  curr  =  this . head 
204+         let  next  =  curr . next 
205+ 
206+         while  ( curr )  { 
207+             next  =  curr . next 
208+             curr . next  =  prev 
209+             prev  =  curr 
210+             curr  =  next 
211+         } 
212+ 
213+         this . head  =  prev 
214+     } 
215+ } 
216+ 
217+ // SAMPLE USECASE 
218+ 
219+ const  list  =  new  LinkedList ( ) 
220+ list . insertAtTail  ( 10 ) 
221+ list . insertAtTail  ( 20 ) 
222+ list . insertAtTail  ( 30 ) 
223+ list . insertAtTail  ( 40 ) 
224+ list . insertAtTail  ( 50 ) 
225+ list . reverse  ( ) 
226+ list . print  ( ) 
 
 
   
 
     
   
   
          
    
    
     
    
      
     
     
    You can’t perform that action at this time.
  
 
    
  
    
      
        
     
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments