Append the elements of queue in mirror-inverse order

Given a queue Q containing N strings, the task is to restructure the queue to double its size such that the second half represents the mirror image of the first half.
Examples:
Input: Q = {“Hello”, “World”}
Output: {“Hello”, “World”, “World”, “Hello”}
Explanation:
The second half of the output queue is the mirror image of the first half. That is:
“Hello”, “World” | “World”, “Hello”
Input: Q = {“Hi”, “Geeks”}
Output: {“Hi”, “Geeks”, “Geeks”, “Hi”}
Approach: On observing carefully, we can say that the second half of the output queue is the reverse of the first half. That is:
- Store the size of the queue in a variable named size.
- Push the Queue elements into a stack without actually losing the elements. This can be achieved by using emplace().
- Repeat the process until size becomes 0.
- Push the elements of the stack back to the queue.
Below is the implementation of the above approach.
C++
// C++ program to arrange the// elements of the queue// to the end such that// the halves are mirror// order of each other#include <bits/stdc++.h>using namespace std;// Function to display// the elements of// the queuevoid showq(queue<string> q){ // Iterating through the queue // and printing the elements while (!q.empty()) { cout << q.front() << " "; q.pop(); }}// Function to produce mirror elementsvoid mirrorQueue(queue<string>& q){ int size = q.size(); // Defining a stack stack<string> st; // Pushing the elements // of a queue // in a stack without // losing them // from the queue while (size--) { string x = q.front(); // Push the element // to the end of the // queue q.emplace(x); // Push the element // into the stack st.push(x); // Remove the element q.pop(); } // Appending the elements // from the stack // to the queue while (!st.empty()) { string el = st.top(); q.push(el); st.pop(); }}// Driver Codeint main(){ queue<string> q; q.push("Hello"); q.push("World"); mirrorQueue(q); showq(q); return 0;} |
Java
// Java program to arrange the// elements of the queue// to the end such that// the halves are mirror// order of each otherimport java.util.*;class GFG{// Function to display// the elements of// the queuestatic void showq(Queue<String> q){ // Iterating through the queue // and printing the elements while (!q.isEmpty()) { System.out.print(q.peek() + " "); q.remove(); }}// Function to produce mirror elementsstatic void mirrorQueue(Queue<String> q){ int size = q.size(); // Defining a stack Stack<String> st = new Stack<>(); // Pushing the elements // of a queue // in a stack without // losing them // from the queue while (size-->0) { String x = q.peek(); // Push the element // to the end of the // queue q.add(x); // Push the element // into the stack st.add(x); // Remove the element q.remove(); } // Appending the elements // from the stack // to the queue while (!st.isEmpty()) { String el = st.peek(); q.add(el); st.pop(); }}// Driver Codepublic static void main(String[] args){ Queue<String> q = new linkedList<String>(); q.add("Hello"); q.add("World"); mirrorQueue(q); showq(q);}}// This code is contributed by gauravrajput1 |
Python3
# Python3 program to arrange the# elements of the queue# to the end such that# the halves are mirror# order of each other# Function to display# the elements of# the queuedef showq(q) : # Iterating through the queue # and printing the elements while (len(q) != 0) : print(q[0] , end = " ") q.pop(0) # Function to produce mirror elementsdef mirrorQueue(q) : size = len(q) # Defining a stack st = [] # Pushing the elements # of a queue # in a stack without # losing them # from the queue while (size > 0) : x = q[0] # Push the element # to the end of the # queue q.append(x) # Push the element # into the stack st.append(x) # Remove the element q.pop(0) size -= 1 # Appending the elements # from the stack # to the queue while (len(st) != 0) : el = st[len(st) - 1] q.append(el) st.pop() q = []q.append("Hello")q.append("World")mirrorQueue(q)showq(q)# This code is contributed by divyeshrabadiya07 |
C#
// C# program to arrange the// elements of the queue// to the end such that// the halves are mirror// order of each otherusing System;using System.Collections.Generic;class GFG{// Function to display// the elements of// the queuestatic void showq(Queue<String> q){ // Iterating through the queue // and printing the elements while (q.Count != 0) { Console.Write(q.Peek() + " "); q.Dequeue(); }}// Function to produce mirror elementsstatic void mirrorQueue(Queue<String> q){ int size = q.Count; // Defining a stack Stack<String> st = new Stack<String>(); // Pushing the elements // of a queue // in a stack without // losing them // from the queue while (size --> 0) { String x = q.Peek(); // Push the element // to the end of the // queue q.Enqueue(x); // Push the element // into the stack st.Push(x); // Remove the element q.Dequeue(); } // Appending the elements // from the stack // to the queue while (st.Count != 0) { String el = st.Peek(); q.Enqueue(el); st.Pop(); }}// Driver Codepublic static void Main(String[] args){ Queue<String> q = new Queue<String>(); q.Enqueue("Hello"); q.Enqueue("World"); mirrorQueue(q); showq(q);}}// This code is contributed by Rajput-Ji |
Javascript
<script>// JavaScript program to arrange the// elements of the queue// to the end such that// the halves are mirror// order of each other// Function to display// the elements of// the queuefunction showq(q){ // Iterating through the queue // and printing the elements while (q.length!=0) { document.write(q[0] + " "); q.shift(); }}// Function to produce mirror elementsfunction mirrorQueue(q){ size = q.length; // Defining a stack let st = []; // Pushing the elements // of a queue // in a stack without // losing them // from the queue while (size-->0) { let x = q[0]; // Push the element // to the end of the // queue q.push(x); // Push the element // into the stack st.push(x); // Remove the element q.shift(); } // Appending the elements // from the stack // to the queue while (st.length!=0) { let el = st[st.length-1]; q.push(el); st.pop(); }}// Driver Codelet q=[];q.push("Hello");q.push("World");mirrorQueue(q);showq(q);// This code is contributed by patel2127</script> |
Hello World World Hello
Time Complexity: O(N), where N is the size of the queue
Auxiliary Space: O(N)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 zambiatek!



