In Reversing a Queue problem we have given a queue, write an algorithm to reverse the queue.
Table of Contents
Examples
Input
queue = 10 -> 8 -> 4 -> 23
Output
queue = 23->4->8->10
Input
queue = 11 -> 98 -> 31 -> 42 -> 73 -> 6
Output
queue = 6 -> 73 -> 42 -> 31 -> 98 -> 11
Input
queue = 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9
Output
queue = 9 -> 8 -> 7 -> 6 -> 5 -> 4 -> 3 -> 2 -> 1
Algorithm for Reversing a Queue
A queue can be reversed by using a stack,
- Remove all the elements from the queue and push them to a stack.
- Pop-out all the elements from the stack and push them back to the queue.
- The queue is revered, print the elements of the queue.
Explanation for Reversing a Queue
Consider an example,
queue =10 -> 8 -> 4 -> 23
Step 1
One by one remove elements from the queue and push them into a stack.
queue =10 -> 8 -> 4 -> 23 and stack= null
Iteration 1
queue = 8 -> 4 -> 23 and stack= 10
Iteration 2
queue = 4 -> 23 and stack = 8 -> 10
Iteration 3
queue = 23 and stack= 4 -> 8 -> 23
Iteration 4
queue = null and stack = 23->4->8->23
Step 2
Pop out all the elements from the stack and push them back to the queue.
queue = null and stack = 23 -> 4 -> 8 -> 10
Iteration 1
queue = 23 and stack= 4 -> 8 -> 10
Iteration 2
queue = 23 -> 4 and stack = 8 -> 10
Iteration 3
queue = 23 -> 4 -> 8 and stack = 10
Iteration 4
queue = 23 -> 4 -> 8 -> 10 and stack = null
The queue is reversed. See the image below for clarification.
JAVA Code for Reversing a Queue
import java.util.LinkedList; import java.util.Queue; import java.util.Stack; public class ReversingAQueue { private static void reverseQueue(Queue<Integer> queue) { int n = queue.size(); Stack<Integer> stack = new Stack<>(); // Remove all the elements from queue and push them to stack for (int i = 0; i < n; i++) { int curr = queue.poll(); stack.push(curr); } // Pop out elements from the stack and push them back to queue for (int i = 0; i < n; i++) { int curr = stack.pop(); queue.add(curr); } // Print the reversed queue for (Integer i : queue) { System.out.print(i + " "); } System.out.println(); } public static void main(String[] args) { // Example 1 Queue<Integer> q1 = new LinkedList<>(); q1.add(10); q1.add(8); q1.add(4); q1.add(23); reverseQueue(q1); // Example 2 Queue<Integer> q2 = new LinkedList<>(); q2.add(11); q2.add(98); q2.add(31); q2.add(42); q2.add(73); q2.add(6); reverseQueue(q2); } }
23 4 8 10 6 73 42 31 98 11
C++ Code for Reversing a Queue
#include<bits/stdc++.h> using namespace std; void reverseQueue(queue<int> &queue) { int n = queue.size(); stack<int> st; // Remove all the elements from queue and push them to stack for (int i = 0; i < n; i++) { int curr = queue.front(); queue.pop(); st.push(curr); } // Pop out elements from the stack and push them back to queue for (int i = 0; i < n; i++) { int curr = st.top(); st.pop(); queue.push(curr); } // Print the reversed queue for (int i = 0; i < n; i++) { int curr = queue.front(); queue.pop(); cout<<curr<<" "; queue.push(curr); } cout<<endl; } int main() { // Example 1 queue<int> q1; int k1 = 3; q1.push(10); q1.push(8); q1.push(4); q1.push(23); reverseQueue(q1); // Example 2 queue<int> q2; int k2 = 2; q2.push(11); q2.push(98); q2.push(31); q2.push(42); q2.push(73); q2.push(6); reverseQueue(q2); }
23 4 8 10 6 73 42 31 98 11
Complexity Analysis
Time Complexity = O(n)
Space Complexity = O(n)
where n is the number of nodes in the queue.