Append the elements of queue in mirror-inverse order - GeeksforGeeks

13 Aug, 2021
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.
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++
Java
Python3
C#
Javascript
// 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 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 inkedList<String>();    q.add("Hello");    q.add("World");    mirrorQueue(q);    showq(q);}} // This code is contributed by gauravrajput1
# 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# 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
<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 queueAuxiliary Space: O(N) 
Akanksha_Rai
GauravRajput1
Rajput-Ji
divyeshrabadiya07
patel2127
pankajsharmagfg
Competitive Programming
Data Structures
Queue
Stack
Data Structures
Stack
Queue
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Prefix Sum Array - Implementation and Applications in Competitive Programming
Ordered Set and GNU C++ PBDS
Modulo 10^9+7 (1000000007)
What is Competitive Programming and How to Prepare for It?
7 Best Coding Challenge Websites in 2020
SDE SHEET - A Complete Guide for SDE Preparation
Top 50 Array Coding Problems for Interviews
DSA Sheet by Love Babbar
Doubly Linked List | Set 1 (Introduction and Insertion)
How to Start Learning DSA?