File tree Expand file tree Collapse file tree 3 files changed +53
-0
lines changed
src/_DataStructures_/LinkedList/reverse-linked-list Expand file tree Collapse file tree 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
1717 - [ N Element From Last] ( src/_DataStructures_/LinkedList/element-from-last )
1818 - [ Middle Node] ( src/_DataStructures_/LinkedList/middle-node )
1919 - [ Detect Loop] ( src/_DataStructures_/LinkedList/loop-in-list )
20+ - [ Reverse Linked List] ( src/_DataStructures_/LinkedList/reverse-linked-list )
2021- [ Stack] ( src/_DataStructures_/Stack )
2122 - [ Implement Queue Using Stack] ( src/_DataStructures_/Stack/immitate-queue-using-stack )
2223 - [ 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