# 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[0], end = “, “)
queue.get()

# Function to reverse the queue
def reversequeue(queue):
Stack = []
while (not queue.empty()):
Stack.append(queue.queue[0])
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
```

## tags:

Queue Stack Stack Queue

code