File tree 3 files changed +53
-0
lines changed
src/_DataStructures_/LinkedList/reverse-linked-list
3 files changed +53
-0
lines changed Original file line number Diff line number Diff line change @@ -17,6 +17,7 @@ Collection of interview questions with Unit Tests. Problems includes Data Struct
17
17
- [ N Element From Last] ( src/_DataStructures_/LinkedList/element-from-last )
18
18
- [ Middle Node] ( src/_DataStructures_/LinkedList/middle-node )
19
19
- [ Detect Loop] ( src/_DataStructures_/LinkedList/loop-in-list )
20
+ - [ Reverse Linked List] ( src/_DataStructures_/LinkedList/reverse-linked-list )
20
21
- [ Stack] ( src/_DataStructures_/Stack )
21
22
- [ Implement Queue Using Stack] ( src/_DataStructures_/Stack/immitate-queue-using-stack )
22
23
- [ Baseball Game] ( src/_DataStructures_/Stack/baseball-game )
Original file line number Diff line number Diff line change
1
+ function reverseLinkedList ( linkedList ) {
2
+ let next = linkedList . getFirst ( ) ;
3
+ let current = null ;
4
+ let prev ;
5
+ while ( next != null ) {
6
+ prev = current ;
7
+ current = next ;
8
+ next = next . next ;
9
+ current . next = prev ;
10
+ }
11
+ return current ;
12
+ } ;
13
+ module . exports = {
14
+ reverseLinkedList,
15
+ } ;
Original file line number Diff line number Diff line change
1
+ const { LinkedList } = require ( '../index' ) ;
2
+ const { reverseLinkedList } = require ( '.' ) ;
3
+
4
+ describe ( 'Reverse a LinkedList' , ( ) => {
5
+ let list = null ;
6
+ beforeEach ( ( ) => {
7
+ list = new LinkedList ( ) ;
8
+ list . addAtBeginning ( '1' ) ;
9
+ list . addAtEnd ( '2' ) ;
10
+ list . addAtEnd ( '3' ) ;
11
+ list . addAtEnd ( '4' ) ;
12
+ list . addAtEnd ( '5' ) ;
13
+ } ) ;
14
+
15
+ it ( 'Should return `null` for empty list' , ( ) => {
16
+ list . delete ( ) ;
17
+ expect ( reverseLinkedList ( list ) ) . toEqual ( null ) ;
18
+ } ) ;
19
+
20
+ it ( 'Should return `5`->`4`->`3`->`2`->`1` for the given list' , ( ) => {
21
+ let reversedList = reverseLinkedList ( list ) ;
22
+ expect ( reversedList . data ) . toEqual ( '5' ) ;
23
+ expect ( reversedList . next . data ) . toEqual ( '4' ) ;
24
+ expect ( reversedList . next . next . data ) . toEqual ( '3' ) ;
25
+ expect ( reversedList . next . next . next . data ) . toEqual ( '2' ) ;
26
+ expect ( reversedList . next . next . next . next . data ) . toEqual ( '1' ) ;
27
+ } ) ;
28
+
29
+ it ( 'Should return `3`->`2`->`1` after deleting 2 last nodes of the list' , ( ) => {
30
+ list . removeFromEnd ( ) ;
31
+ list . removeFromEnd ( ) ;
32
+ let reversedList2 = reverseLinkedList ( list ) ;
33
+ expect ( reversedList2 . data ) . toEqual ( '3' ) ;
34
+ expect ( reversedList2 . next . data ) . toEqual ( '2' ) ;
35
+ expect ( reversedList2 . next . next . data ) . toEqual ( '1' ) ;
36
+ } ) ;
37
+ } ) ;
You can’t perform that action at this time.
0 commit comments