Skip to content
Related Articles
Reversing a Queue using another Queue
• Difficulty Level : Easy
• Last Updated : 09 Jun, 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++

 `// C++ implementation of the above approach``#include ``using` `namespace` `std;` `// Function to return the reversed queue``queue<``int``> reverse(queue<``int``> q)``{``    ``// Size of ueue``    ``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 Code``int` `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

 `// Java implementation of the above approach``import` `java.util.*;``class` `GFG``{` `// Function to return the reversed queue``static` `Queue reverse(Queue q)``{``    ``// Size of ueue``    ``int` `s = q.size();` `    ``// Second queue``    ``Queue 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 Code``public` `static` `void` `main(String[] args)``{``    ``Queue 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

 `# Python3 implementation of the above approach``from` `collections ``import` `deque` `# Function to return the reversed queue``def` `reverse(q):``    ` `    ``# Size of ueue``    ``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 Code``q ``=` `deque()` `# Insert elements``q.append(``1``)``q.append(``2``)``q.append(``3``)``q.append(``4``)``q.append(``5``)` `q ``=` `reverse(q)` `# Print the queue``while` `(``len``(q) > ``0``):``    ``print``(q.popleft(), end ``=` `" "``)` `# This code is contributed by Mohit Kumar`

## C#

 `// C# Program to print the given pattern``using` `System;``using` `System.Collections.Generic;``    ` `class` `GFG``{` `// Function to return the reversed queue``static` `Queue<``int``> reverse(Queue<``int``> q)``{``    ``// Size of ueue``    ``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 Code``public` `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`

## Javascript

 ``
Output:
`5 4 3 2 1`

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price.

In case you wish to attend live classes with industry experts, please refer Geeks Classes Live

My Personal Notes arrow_drop_up