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++ 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 queue void showq(queue<string> q)
{ // Iterating through the queue
// and printing the elements
while (!q.empty()) {
cout << q.front() << " " ;
q.pop();
}
} // Function to produce mirror elements void 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 Code int 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 other import java.util.*;
class GFG{
// Function to display // the elements of // the queue static 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 elements static 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 Code public 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 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 queue def 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 elements def 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 other using System;
using System.Collections.Generic;
class GFG{
// Function to display // the elements of // the queue static 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 elements static 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 Code public 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 queue function showq(q)
{ // Iterating through the queue
// and printing the elements
while (q.length!=0)
{
document.write(q[0] + " " );
q.shift();
}
} // Function to produce mirror elements function 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 Code let 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)