@@ -141,6 +141,31 @@ export default class LinkedList<T> {
141141 return currentNode ;
142142 }
143143
144+ public reverse ( ) : boolean {
145+ if ( this . length < 2 || ! this . head || ! this . tail ) return false ;
146+
147+ this . tail = this . head ; // Current head will become the new tail
148+
149+ let first = this . head ;
150+ let second = first . getNext ( ) ;
151+ let tempNode ; // Will be the third sequential node in deletion sequence
152+
153+ // Travel up the tree while the second node is present, i.e. not null
154+ while ( second ) {
155+ tempNode = second . getNext ( ) ;
156+
157+ second . setNext ( first ) ;
158+
159+ first = second ;
160+ second = tempNode ;
161+ }
162+
163+ this . tail . setNext ( null ) ;
164+ this . head = first ;
165+
166+ return true ;
167+ }
168+
144169 public toString ( nodesPerGroup ?: number ) : string {
145170 if ( this . length === 0 || ! this . head ) {
146171 return "" ;
@@ -214,6 +239,11 @@ if (import.meta.main) {
214239 printSearchFor ( 'Zuko' , ATLA ) ;
215240 printGetValueAtIndex ( 2 , ATLA ) ;
216241 printGetValueAtIndex ( 5 , ATLA ) ;
242+
243+ console . log ( '------------ Reversing List ------------' ) ;
244+ ATLA . reverse ( ) ;
245+ printLinkedList ( ATLA ) ;
246+
217247 console . log ( '----------------------------------' ) ;
218248
219249 printRemoveIndex ( 1 , ATLA ) ;
@@ -234,6 +264,10 @@ if (import.meta.main) {
234264 ATLA . append ( 'Aang' ) ;
235265 printLinkedList ( ATLA ) ;
236266
267+ console . log ( '------------ Reversing List ------------' ) ;
268+ ATLA . reverse ( ) ;
269+ printLinkedList ( ATLA ) ;
270+
237271 // RUN: deno run Data-Structures/Linked-Lists/LinkedList.ts
238272}
239273
@@ -243,7 +277,7 @@ if (import.meta.main) {
243277// HEAD { value: "Appa", next: true }
244278// 1 { value: "Sokka", next: true }
245279// 2 { value: "Katara", next: false } TAIL
246-
280+ //
247281// --- Node Count: 6
248282// HEAD { value: "Appa", next: true }
249283// 1 { value: "Zuko", next: true }
@@ -259,40 +293,54 @@ if (import.meta.main) {
259293// "Zuko" found at index: 1
260294// Element at index 2: Sokka
261295// Element at index 5: Katara
296+ // ------------ Reversing List ------------
297+ // --- Node Count: 6
298+ // HEAD { value: "Katara", next: true }
299+ // 1 { value: "Iroh", next: true }
300+ // 2 { value: "Aang", next: true }
301+ // 3 { value: "Sokka", next: true }
302+ // 4 { value: "Zuko", next: true }
303+ // 5 { value: "Appa", next: false } TAIL
304+ //
262305// ----------------------------------
263- // Removing element at index 1: "Zuko "
306+ // Removing element at index 1: "Iroh "
264307// --- Node Count: 5
265- // HEAD { value: "Appa ", next: true }
266- // 1 { value: "Sokka ", next: true }
267- // 2 { value: "Aang ", next: true }
268- // 3 { value: "Iroh ", next: true }
269- // 4 { value: "Katara ", next: false } TAIL
308+ // HEAD { value: "Katara ", next: true }
309+ // 1 { value: "Aang ", next: true }
310+ // 2 { value: "Sokka ", next: true }
311+ // 3 { value: "Zuko ", next: true }
312+ // 4 { value: "Appa ", next: false } TAIL
270313//
271- // Removing element at index 0: "Appa "
314+ // Removing element at index 0: "Katara "
272315// --- Node Count: 4
273- // HEAD { value: "Sokka ", next: true }
274- // 1 { value: "Aang ", next: true }
275- // 2 { value: "Iroh ", next: true }
276- // 3 { value: "Katara ", next: false } TAIL
316+ // HEAD { value: "Aang ", next: true }
317+ // 1 { value: "Sokka ", next: true }
318+ // 2 { value: "Zuko ", next: true }
319+ // 3 { value: "Appa ", next: false } TAIL
277320//
278- // Removing element at index 2: "Iroh "
321+ // Removing element at index 2: "Zuko "
279322// --- Node Count: 3
280- // HEAD { value: "Sokka ", next: true }
281- // 1 { value: "Aang ", next: true }
282- // 2 { value: "Katara ", next: false } TAIL
323+ // HEAD { value: "Aang ", next: true }
324+ // 1 { value: "Sokka ", next: true }
325+ // 2 { value: "Appa ", next: false } TAIL
283326//
284- // Removing element at index 2: "Katara "
327+ // Removing element at index 2: "Appa "
285328// --- Node Count: 2
286- // HEAD { value: "Sokka ", next: true }
287- // 1 { value: "Aang ", next: false } TAIL
329+ // HEAD { value: "Aang ", next: true }
330+ // 1 { value: "Sokka ", next: false } TAIL
288331//
289- // Removing element at index 1: "Aang "
290- // Removing element at index 0: "Sokka "
332+ // Removing element at index 1: "Sokka "
333+ // Removing element at index 0: "Aang "
291334// Empty linked list -_-
292335// ----------------------------------
293336// --- Node Count: 1
294337// HEAD { value: "Katara", next: false } TAIL
295338//
296339// --- Node Count: 2
297340// HEAD { value: "Katara", next: true }
298- // 1 { value: "Aang", next: false } TAIL
341+ // 1 { value: "Aang", next: false } TAIL
342+ //
343+ // ------------ Reversing List ------------
344+ // --- Node Count: 2
345+ // HEAD { value: "Aang", next: true }
346+ // 1 { value: "Katara", next: false } TAIL
0 commit comments