Skip to content

Commit 10114b7

Browse files
Add ReverseQueueRecursion.java: Reverse a Queue using recursion (#7281)
* Create ReverseQueueRecursion Add ReverseQueueRecursion.java: - Reverses a Queue using recursion (generic <T>) - Includes unit tests in ReverseQueueRecursionTest.java - Follows repo style (final class, private constructor, Javadoc) * Create ReverseQueueRecursionTest.java Add ReverseQueueRecursionTest as required by CONTRIBUTING.md * Rename ReverseQueueRecursion to ReverseQueueRecursion.java * Update ReverseQueueRecursion.java * Update ReverseQueueRecursion.java * Update ReverseQueueRecursion.java * Update ReverseQueueRecursion.java * Update ReverseQueueRecursionTest.java * Update ReverseQueueRecursion.java * Update ReverseQueueRecursionTest.java * Update ReverseQueueRecursionTest.java * Update ReverseQueueRecursion.java * Update ReverseQueueRecursionTest.java * Update ReverseQueueRecursionTest.java * Update ReverseQueueRecursionTest.java * Update ReverseQueueRecursionTest.java * Update ReverseQueueRecursion.java
1 parent 12935c2 commit 10114b7

File tree

2 files changed

+82
-0
lines changed

2 files changed

+82
-0
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.thealgorithms.datastructures.queues;
2+
3+
import java.util.Queue;
4+
5+
/**
6+
* Reverse a queue using recursion.
7+
*/
8+
public final class ReverseQueueRecursion {
9+
private ReverseQueueRecursion() {
10+
// private constructor to prevent instantiation
11+
}
12+
13+
/**
14+
* Reverses the given queue recursively.
15+
*
16+
* @param queue the queue to reverse
17+
* @param <T> the type of elements in the queue
18+
*/
19+
public static <T> void reverseQueue(final Queue<T> queue) {
20+
if (queue == null || queue.isEmpty()) {
21+
return;
22+
}
23+
24+
final T front = queue.poll();
25+
reverseQueue(queue);
26+
queue.add(front);
27+
}
28+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package com.thealgorithms.datastructures.queues;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assertions.assertTrue;
5+
6+
import java.util.LinkedList;
7+
import java.util.Queue;
8+
import org.junit.jupiter.api.Test;
9+
10+
class ReverseQueueRecursionTest {
11+
@Test
12+
void testReverseMultipleElements() {
13+
Queue<Integer> queue = new LinkedList<>();
14+
queue.add(1);
15+
queue.add(2);
16+
queue.add(3);
17+
queue.add(4);
18+
ReverseQueueRecursion.reverseQueue(queue);
19+
assertEquals(4, queue.poll());
20+
assertEquals(3, queue.poll());
21+
assertEquals(2, queue.poll());
22+
assertEquals(1, queue.poll());
23+
assertTrue(queue.isEmpty());
24+
}
25+
26+
@Test
27+
void testReverseSingleElement() {
28+
Queue<Integer> queue = new LinkedList<>();
29+
queue.add(42);
30+
ReverseQueueRecursion.reverseQueue(queue);
31+
assertEquals(42, queue.poll());
32+
assertTrue(queue.isEmpty());
33+
}
34+
35+
@Test
36+
void testReverseEmptyQueue() {
37+
Queue<Integer> queue = new LinkedList<>();
38+
ReverseQueueRecursion.reverseQueue(queue);
39+
assertTrue(queue.isEmpty());
40+
}
41+
42+
@Test
43+
void testReverseStringQueue() {
44+
Queue<String> queue = new LinkedList<>();
45+
queue.add("A");
46+
queue.add("B");
47+
queue.add("C");
48+
ReverseQueueRecursion.reverseQueue(queue);
49+
assertEquals("C", queue.poll());
50+
assertEquals("B", queue.poll());
51+
assertEquals("A", queue.poll());
52+
assertTrue(queue.isEmpty());
53+
}
54+
}

0 commit comments

Comments
 (0)