# Reversing a Queue

Give an algorithm for reversing a queue Q. Only following standard operations are allowed on queue.

1. enqueue(x) : Add an item x to rear of queue.
2. dequeue() : Remove an item from front of queue.
3. empty() : Checks if a queue is empty or not.

Examples:

```Input : Q = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
Output :Q = [100, 90, 80, 70, 60, 50, 40, 30, 20, 10]

Input :[1, 2, 3, 4, 5]
Output :[5, 4, 3, 2, 1]
```

## C++

 `// CPP program to reverse a Queue ` `#include ` `using` `namespace` `std; ` ` `  `// Utility function to print the queue ` `void` `Print(queue<``int``>& Queue) ` `{ ` `    ``while` `(!Queue.empty()) { ` `        ``cout << Queue.front() << ``" "``; ` `        ``Queue.pop(); ` `    ``} ` `} ` ` `  `// Function to reverse the queue ` `void` `reverseQueue(queue<``int``>& Queue) ` `{ ` `    ``stack<``int``> Stack; ` `    ``while` `(!Queue.empty()) { ` `        ``Stack.push(Queue.front()); ` `        ``Queue.pop(); ` `    ``} ` `    ``while` `(!Stack.empty()) { ` `        ``Queue.push(Stack.top()); ` `        ``Stack.pop(); ` `    ``} ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``queue<``int``> Queue; ` `    ``Queue.push(10); ` `    ``Queue.push(20); ` `    ``Queue.push(30); ` `    ``Queue.push(40); ` `    ``Queue.push(50); ` `    ``Queue.push(60); ` `    ``Queue.push(70); ` `    ``Queue.push(80); ` `    ``Queue.push(90); ` `    ``Queue.push(100); ` ` `  `    ``reverseQueue(Queue); ` `    ``Print(Queue); ` `} `

## Java

 `// Java program to reverse a Queue ` `import` `java.util.LinkedList; ` `import` `java.util.Queue; ` `import` `java.util.Stack; ` ` `  `// Java program to reverse a queue ` `public` `class` `Queue_reverse { ` `     `  `    ``static` `Queue queue; ` ` `  `    ``// Utility function to print the queue ` `    ``static` `void` `Print() ` `    ``{ ` `        ``while` `(!queue.isEmpty()) { ` `            ``System.out.print( queue.peek() + ``", "``); ` `            ``queue.remove(); ` `        ``} ` `    ``} ` ` `  `    ``// Function to reverse the queue ` `    ``static` `void` `reversequeue() ` `    ``{ ` `        ``Stack stack = ``new` `Stack<>(); ` `        ``while` `(!queue.isEmpty()) { ` `            ``stack.add(queue.peek()); ` `            ``queue.remove(); ` `        ``} ` `        ``while` `(!stack.isEmpty()) { ` `            ``queue.add(stack.peek()); ` `            ``stack.pop(); ` `        ``} ` `    ``} ` ` `  `    ``// Driver code ` `    ``public` `static` `void` `main(String args[]) ` `    ``{ ` `        ``queue = ``new` `LinkedList(); ` `        ``queue.add(``10``); ` `        ``queue.add(``20``); ` `        ``queue.add(``30``); ` `        ``queue.add(``40``); ` `        ``queue.add(``50``); ` `        ``queue.add(``60``); ` `        ``queue.add(``70``); ` `        ``queue.add(``80``); ` `        ``queue.add(``90``); ` `        ``queue.add(``100``); ` ` `  `        ``reversequeue(); ` `        ``Print(); ` `    ``} ` `} ` `//This code is contributed by Sumit Ghosh `

## Python3

# Python3 program to reverse a queue
from queue import Queue

# Utility function to print the queue
def Print(queue):
while (not queue.empty()):
print(queue.queue, end = “, “)
queue.get()

# Function to reverse the queue
def reversequeue(queue):
Stack = []
while (not queue.empty()):
Stack.append(queue.queue)
queue.get()
while (len(Stack) != 0):
queue.put(Stack[-1])
Stack.pop()

# Driver code
if __name__ == ‘__main__’:
queue = Queue()
queue.put(10)
queue.put(20)
queue.put(30)
queue.put(40)
queue.put(50)
queue.put(60)
queue.put(70)
queue.put(80)
queue.put(90)
queue.put(100)

reversequeue(queue)
Print(queue)

# This code is contributed by PranchalK

## C#

 `// c# program to reverse a Queue  ` `using` `System; ` `using` `System.Collections.Generic; ` ` `  `public` `class` `GFG ` `{ ` ` `  `public` `static` `LinkedList<``int``> queue; ` ` `  `// Utility function to print the queue  ` `public` `static` `void` `Print() ` `{ ` `    ``while` `(queue.Count > 0) ` `    ``{ ` `        ``Console.Write(queue.First.Value + ``", "``); ` `        ``queue.RemoveFirst(); ` `    ``} ` `} ` ` `  `// Function to reverse the queue  ` `public` `static` `void` `reversequeue() ` `{ ` `    ``Stack<``int``> stack = ``new` `Stack<``int``>(); ` `    ``while` `(queue.Count > 0) ` `    ``{ ` `        ``stack.Push(queue.First.Value); ` `        ``queue.RemoveFirst(); ` `    ``} ` `    ``while` `(stack.Count > 0) ` `    ``{ ` `        ``queue.AddLast(stack.Peek()); ` `        ``stack.Pop(); ` `    ``} ` `} ` ` `  `// Driver code  ` `public` `static` `void` `Main(``string``[] args) ` `{ ` `    ``queue = ``new` `LinkedList<``int``>(); ` `    ``queue.AddLast(10); ` `    ``queue.AddLast(20); ` `    ``queue.AddLast(30); ` `    ``queue.AddLast(40); ` `    ``queue.AddLast(50); ` `    ``queue.AddLast(60); ` `    ``queue.AddLast(70); ` `    ``queue.AddLast(80); ` `    ``queue.AddLast(90); ` `    ``queue.AddLast(100); ` ` `  `    ``reversequeue(); ` `    ``Print(); ` `} ` `} ` ` `  `// This code is contributed by Shrikant13 `

Output:

```100, 90, 80, 70, 60, 50, 40, 30, 20, 10
```

This article is contributed by Raghav Sharma. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

My Personal Notes arrow_drop_up

Article Tags :
Practice Tags :

2

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.