Reversing a Queue using another Queue - GeeksforGeeks

28 Dec, 2021
Given a queue. The task is to reverse the queue using another another empty queue.
Examples: 
Input: queue[] = {1, 2, 3, 4, 5}
Output: 5 4 3 2 1

Input: queue[] = {10, 20, 30, 40}
Output: 40 30 20 10
Approach:  
Given a queue and an empty queue.
The last element of the queue should be the first element of the new queue.
To get the last element there is a need to pop the queue one by one and add it to the end of the queue, size – 1 times.
So after that, we will get the last element in front of the queue. Now pop that element out and add it to the new queue. Repeat the steps s – 1 times where s is the original size of the queue.
Below is the implementation of the approach: 
C++
Java
Python3
C#
Javascript
// C++ implementation of the above approach#include <bits/stdc++.h>using namespace std; // Function to return the reversed queuequeue<int> reverse(queue<int> q){    // Size of queue    int s = q.size();     // Second queue    queue<int> ans;     for (int i = 0; i < s; i++) {         // Get the last element to the        // front of queue        for (int j = 0; j < q.size() - 1; j++) {            int x = q.front();            q.pop();            q.push(x);        }         // Get the last element and        // add it to the new queue        ans.push(q.front());        q.pop();    }    return ans;} // Driver Codeint main(){    queue<int> q;     // Insert elements    q.push(1);    q.push(2);    q.push(3);    q.push(4);    q.push(5);     q = reverse(q);     // Print the queue    while (!q.empty()) {        cout << q.front() << " ";        q.pop();    }     return 0;}
// Java implementation of the above approachimport java.util.*;class GFG{ // Function to return the reversed queuestatic Queue<Integer> reverse(Queue<Integer> q){    // Size of queue    int s = q.size();     // Second queue    Queue<Integer> ans = new LinkedList<>();     for (int i = 0; i < s; i++)    {         // Get the last element to the        // front of queue        for (int j = 0; j < q.size() - 1; j++)        {            int x = q.peek();            q.remove();            q.add(x);        }         // Get the last element and        // add it to the new queue        ans.add(q.peek());        q.remove();    }    return ans;} // Driver Codepublic static void main(String[] args){    Queue<Integer> q = new LinkedList<>();     // Insert elements    q.add(1);    q.add(2);    q.add(3);    q.add(4);    q.add(5);     q = reverse(q);     // Print the queue    while (!q.isEmpty())    {        System.out.print(q.peek() + " ");        q.remove();    }    }} // This code is contributed by Princi Singh
# Python3 implementation of the above approachfrom collections import deque # Function to return the reversed queuedef reverse(q):         # Size of queue    s = len(q)     # Second queue    ans = deque()     for i in range(s):         # Get the last element to the        # front of queue        for j in range(s - 1):            x = q.popleft()            q.appendleft(x)         # Get the last element and        # add it to the new queue        ans.appendleft(q.popleft())    return ans # Driver Codeq = deque() # Insert elementsq.append(1)q.append(2)q.append(3)q.append(4)q.append(5) q = reverse(q) # Print the queuewhile (len(q) > 0):    print(q.popleft(), end = " ") # This code is contributed by Mohit Kumar
// C# Program to print the given patternusing System;using System.Collections.Generic;     class GFG{ // Function to return the reversed queuestatic Queue<int> reverse(Queue<int> q){    // Size of queue    int s = q.Count;     // Second queue    Queue<int> ans = new Queue<int>();     for (int i = 0; i < s; i++)    {         // Get the last element to the        // front of queue        for (int j = 0; j < q.Count - 1; j++)        {            int x = q.Peek();            q.Dequeue();            q.Enqueue(x);        }         // Get the last element and        // add it to the new queue        ans.Enqueue(q.Peek());        q.Dequeue();    }    return ans;} // Driver Codepublic static void Main(String[] args){    Queue<int> q = new Queue<int>();     // Insert elements    q.Enqueue(1);    q.Enqueue(2);    q.Enqueue(3);    q.Enqueue(4);    q.Enqueue(5);     q = reverse(q);     // Print the queue    while (q.Count!=0)    {        Console.Write(q.Peek() + " ");        q.Dequeue();    }    }} // This code is contributed by Princi Singh
<script> // Javascript implementation of the above approach // Function to return the reversed queuefunction reverse(q){         // Size of queue    let s = q.length;       // Second queue    let ans = [];       for(let i = 0; i < s; i++)    {                 // Get the last element to the        // front of queue        for(let j = 0; j < q.length - 1; j++)        {            let x = q.shift();            q.push(x);        }           // Get the last element and        // add it to the new queue        ans.push(q[0]);        q.shift();    }    return ans;} // Driver Codelet q = []; // Insert elementsq.push(1);q.push(2);q.push(3);q.push(4);q.push(5); q = reverse(q); // Print the queuewhile (q.length != 0){    document.write(q[0] + " ");    q.shift();} // This code is contributed by patel2127 </script>
5 4 3 2 1
 
princi singh
mohit kumar 29
patel2127
rkbhola5
germanshephered48
Data Structures
Java-Queue-Programs
Competitive Programming
Queue
Data Structures
Queue
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Multistage Graph (Shortest Path)
Breadth First Traversal ( BFS ) on a 2D array
Shortest path in a directed graph by Dijkstra’s algorithm
5 Best Books for Competitive Programming
5 Best Languages for Competitive Programming
Breadth First Search or BFS for a Graph
Level Order Binary Tree Traversal
Queue Interface In Java
Queue in Python
Queue | Set 1 (Introduction and Array Implementation)