Interleave the first half of the queue with second half - GeeksforGeeks

05 May, 2022
Given a queue of integers of even length, rearrange the elements by interleaving the first half of the queue with the second half of the queue. Only a stack can be used as an auxiliary space. Examples:
Input :  1 2 3 4
Output : 1 3 2 4

Input : 11 12 13 14 15 16 17 18 19 20
Output : 11 16 12 17 13 18 14 19 15 20
Following are the steps to solve the problem: 1.Push the first half elements of queue to stack. 2.Enqueue back the stack elements. 3.Dequeue the first half elements of the queue and enqueue them back. 4.Again push the first half elements into the stack. 5.Interleave the elements of queue and stack. 
C++
Java
Python3
C#
Javascript
// C++ program to interleave the first half of the queue// with the second half#include <bits/stdc++.h>using namespace std; // Function to interleave the queuevoid interLeaveQueue(queue<int>& q){    // To check the even number of elements    if (q.size() % 2 != 0)        cout << "Input even number of integers." << endl;     // Initialize an empty stack of int type    stack<int> s;    int halfSize = q.size() / 2;     // Push first half elements into the stack    // queue:16 17 18 19 20, stack: 15(T) 14 13 12 11    for (int i = 0; i < halfSize; i++) {        s.push(q.front());        q.pop();    }     // enqueue back the stack elements    // queue: 16 17 18 19 20 15 14 13 12 11    while (!s.empty()) {        q.push(s.top());        s.pop();    }     // dequeue the first half elements of queue    // and enqueue them back    // queue: 15 14 13 12 11 16 17 18 19 20    for (int i = 0; i < halfSize; i++) {        q.push(q.front());        q.pop();    }     // Again push the first half elements into the stack    // queue: 16 17 18 19 20, stack: 11(T) 12 13 14 15    for (int i = 0; i < halfSize; i++) {        s.push(q.front());        q.pop();    }     // interleave the elements of queue and stack    // queue: 11 16 12 17 13 18 14 19 15 20    while (!s.empty()) {        q.push(s.top());        s.pop();        q.push(q.front());        q.pop();    }} // Driver program to test above functionint main(){    queue<int> q;    q.push(11);    q.push(12);    q.push(13);    q.push(14);    q.push(15);    q.push(16);    q.push(17);    q.push(18);    q.push(19);    q.push(20);    interLeaveQueue(q);    int length = q.size();    for (int i = 0; i < length; i++) {        cout << q.front() << " ";        q.pop();    }    return 0;}
// Java program to interleave// the first half of the queue// with the second halfimport java.util.*; class GFG{ // Function to interleave the queuestatic void interLeaveQueue(Queue<Integer>q){    // To check the even number of elements    if (q.size() % 2 != 0)        System.out.println("Input even number of integers." );     // Initialize an empty stack of int type    Stack<Integer> s = new Stack<>();    int halfSize = q.size() / 2;     // Push first half elements into the stack    // queue:16 17 18 19 20, stack: 15(T) 14 13 12 11    for (int i = 0; i < halfSize; i++)    {        s.push(q.peek());        q.poll();    }     // enqueue back the stack elements    // queue: 16 17 18 19 20 15 14 13 12 11    while (!s.empty())    {        q.add(s.peek());        s.pop();    }     // dequeue the first half elements of queue    // and enqueue them back    // queue: 15 14 13 12 11 16 17 18 19 20    for (int i = 0; i < halfSize; i++)    {        q.add(q.peek());        q.poll();    }     // Again push the first half elements into the stack    // queue: 16 17 18 19 20, stack: 11(T) 12 13 14 15    for (int i = 0; i < halfSize; i++)    {        s.push(q.peek());        q.poll();    }     // interleave the elements of queue and stack    // queue: 11 16 12 17 13 18 14 19 15 20    while (!s.empty())    {        q.add(s.peek());        s.pop();        q.add(q.peek());        q.poll();    }} // Driver codepublic static void main(String[] args){    Queue<Integer> q = new java.util.LinkedList<>();    q.add(11);    q.add(12);    q.add(13);    q.add(14);    q.add(15);    q.add(16);    q.add(17);    q.add(18);    q.add(19);    q.add(20);    interLeaveQueue(q);    int length = q.size();    for (int i = 0; i < length; i++)    {        System.out.print(q.peek() + " ");        q.poll();    }}} // This code contributed by Rajput-Ji
# Python3 program to interleave the first# half of the queue with the second halffrom queue import Queue # Function to interleave the queuedef interLeaveQueue(q):         # To check the even number of elements    if (q.qsize() % 2 != 0):        print("Input even number of integers.")     # Initialize an empty stack of int type    s = []    halfSize = int(q.qsize() / 2)     # put first half elements into    # the stack queue:16 17 18 19 20,    # stack: 15(T) 14 13 12 11    for i in range(halfSize):        s.append(q.queue[0])        q.get()     # enqueue back the stack elements    # queue: 16 17 18 19 20 15 14 13 12 11    while len(s) != 0:        q.put(s[-1])        s.pop()     # dequeue the first half elements of    # queue and enqueue them back    # queue: 15 14 13 12 11 16 17 18 19 20    for i in range(halfSize):        q.put(q.queue[0])        q.get()     # Again put the first half elements into    # the stack queue: 16 17 18 19 20,    # stack: 11(T) 12 13 14 15    for i in range(halfSize):        s.append(q.queue[0])        q.get()     # interleave the elements of queue and stack    # queue: 11 16 12 17 13 18 14 19 15 20    while len(s) != 0:        q.put(s[-1])        s.pop()        q.put(q.queue[0])        q.get() # Driver Codeif __name__ == '__main__':    q = Queue()    q.put(11)    q.put(12)    q.put(13)    q.put(14)    q.put(15)    q.put(16)    q.put(17)    q.put(18)    q.put(19)    q.put(20)    interLeaveQueue(q)    length = q.qsize()    for i in range(length):        print(q.queue[0], end = " ")        q.get() # This code is contributed by PranchalK
// C# program to interleave// the first half of the queue// with the second halfusing System;using System.Collections.Generic; class GFG{ // Function to interleave the queuestatic void interLeaveQueue(Queue<int>q){    // To check the even number of elements    if (q.Count % 2 != 0)        Console.WriteLine("Input even number of integers." );     // Initialize an empty stack of int type    Stack<int> s = new Stack<int>();    int halfSize = q.Count / 2;     // Push first half elements into the stack    // queue:16 17 18 19 20, stack: 15(T) 14 13 12 11    for (int i = 0; i < halfSize; i++)    {        s.Push(q.Peek());        q.Dequeue();    }     // enqueue back the stack elements    // queue: 16 17 18 19 20 15 14 13 12 11    while (s.Count != 0)    {        q.Enqueue(s.Peek());        s.Pop();    }     // dequeue the first half elements of queue    // and enqueue them back    // queue: 15 14 13 12 11 16 17 18 19 20    for (int i = 0; i < halfSize; i++)    {        q.Enqueue(q.Peek());        q.Dequeue();    }     // Again push the first half elements into the stack    // queue: 16 17 18 19 20, stack: 11(T) 12 13 14 15    for (int i = 0; i < halfSize; i++)    {        s.Push(q.Peek());        q.Dequeue();    }     // interleave the elements of queue and stack    // queue: 11 16 12 17 13 18 14 19 15 20    while (s.Count != 0)    {        q.Enqueue(s.Peek());        s.Pop();        q.Enqueue(q.Peek());        q.Dequeue();    }} // Driver codepublic static void Main(String[] args){    Queue<int> q = new Queue<int>();    q.Enqueue(11);    q.Enqueue(12);    q.Enqueue(13);    q.Enqueue(14);    q.Enqueue(15);    q.Enqueue(16);    q.Enqueue(17);    q.Enqueue(18);    q.Enqueue(19);    q.Enqueue(20);    interLeaveQueue(q);    int length = q.Count;    for (int i = 0; i < length; i++)    {        Console.Write(q.Peek() + " ");        q.Dequeue();    }}} // This code is contributed by Princi Singh
<script> // JavaScript program to interleave the first// half of the queue with the second half // Function to interleave the queuefunction interLeaveQueue(q){         // To check the even number of elements    if (q.length % 2 != 0)        document.write("Inpush even number of integers.")     // Initialize an empty stack of int type    let s = []    let halfSize = Math.floor(q.length / 2)     // push first half elements into    // the stack queue:16 17 18 19 20,    // stack: 15(T) 14 13 12 11    for(let i = 0; i < halfSize; i++)        s.push(q.shift())     // enqueue back the stack elements    // queue: 16 17 18 19 20 15 14 13 12 11    while(s.length != 0){        q.push(s[s.length-1])        s.pop()    }     // dequeue the first half elements of    // queue and enqueue them back    // queue: 15 14 13 12 11 16 17 18 19 20    for(let i = 0; i < halfSize; i++)        q.push(q.shift())     // Again push the first half elements into    // the stack queue: 16 17 18 19 20,    // stack: 11(T) 12 13 14 15    for(let i = 0; i < halfSize; i++)        s.push(q.shift())     // interleave the elements of queue and stack    // queue: 11 16 12 17 13 18 14 19 15 20    while(s.length != 0){        q.push(s[s.length-1])        s.pop()        q.push(q.shift())    }} // Driver Code let q =[]q.push(11)q.push(12)q.push(13)q.push(14)q.push(15)q.push(16)q.push(17)q.push(18)q.push(19)q.push(20)interLeaveQueue(q)let length = q.lengthfor(let i=0;i<length;i++)    document.write(q.shift()," ") // This code is contributed by shinjanpatra </script>
Output:
11 16 12 17 13 18 14 19 15 20 
Time complexity: O(n). Auxiliary Space: O(n).
YouTubeGeeksforGeeks507K subscribersInterleave the first half of the queue with second half | GeeksforGeeksWatch laterShareCopy linkInfoShoppingTap to unmuteIf playback doesn't begin shortly, try restarting your device.More videosMore videosYou're signed outVideos you watch may be added to the TV's watch history and influence TV recommendations. To avoid this, cancel and sign in to YouTube on your computer.CancelConfirmSwitch cameraShareInclude playlistAn error occurred while retrieving sharing information. Please try again later.Watch on0:000:000:00 / 2:41•Live•<div class="player-unavailable"><h1 class="message">An error occurred.</h1><div class="submessage"><a href="https://www.youtube.com/watch?v=BNuXP58kAWk" target="_blank">Try watching this video on www.youtube.com</a>, or enable JavaScript if it is disabled in your browser.</div></div>
This article is contributed by Prakriti Gupta. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@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.
PranchalKatiyar
Rajput-Ji
princi singh
shinjanpatra
Queue
Stack
Stack
Queue
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Queue | Set 1 (Introduction and Array Implementation)
Priority Queue | Set 1 (Introduction)
LRU Cache Implementation
Queue - Linked List Implementation
Circular Queue | Set 1 (Introduction and Array Implementation)
Stack Data Structure (Introduction and Program)
Stack Class in Java
Stack in Python
Check for Balanced Brackets in an expression (well-formedness) using Stack
Stack | Set 2 (Infix to Postfix)