Skip to content
Related Articles

# How to remove a specific element from Queue

• Last Updated : 05 Aug, 2021

Given a queue q[] and an integer K, the task is to define a method to remove a specific element from the queue q[]. If there are multiple occurrences of element K, then, remove the first one from the queue q[].

Examples:

Input: q[] = {10, 20, 30, 40, 50, 60}, K = 30
Output: {10, 20, 40, 50, 60}
Explanation: After removal of 30, the queue becomes {10, 20, 40, 50, 60}.

Input: q[] = {1, 2, 3, 3}, K = 3
Output: {1, 2, 3}
Explanation: After removal of the first occurrence of 3, the queue becomes {1, 2,  3}.

Approach: The idea is to create a temporary queue ref[] and store all the elements in it, until K is found. Then, remove K from the original queue q[], and insert the remaining elements back into the queue q[]. Follow the steps below to solve the problem:

Below is the implementation of the above approach.

## C++

 `// C++ program for the above approach.``#include ``using` `namespace` `std;` `// Function to remove an element from``// the queue``void` `remove``(``int` `t, queue<``int``>& q)``{` `    ``// Helper queue to store the elements``    ``// temporarily.``    ``queue<``int``> ref;``    ``int` `s = q.size();``    ``int` `cnt = 0;` `    ``// Finding the value to be removed``    ``while` `(q.front() != t and !q.empty()) {``        ``ref.push(q.front());``        ``q.pop();``        ``cnt++;``    ``}` `    ``// If element is not found``    ``if` `(q.empty()) {``        ``cout << ``"element not found!!"` `<< endl;``        ``while` `(!ref.empty()) {` `            ``// Pushing all the elements back into q``            ``q.push(ref.front());``            ``ref.pop();``        ``}``    ``}` `    ``// If element is found``    ``else` `{``        ``q.pop();``        ``while` `(!ref.empty()) {` `            ``// Pushing all the elements back into q``            ``q.push(ref.front());``            ``ref.pop();``        ``}``        ``int` `k = s - cnt - 1;``        ``while` `(k--) {` `            ``// Pushing elements from front of q to its back``            ``int` `p = q.front();``            ``q.pop();``            ``q.push(p);``        ``}``    ``}``}` `// Function to print all the elements``// of the queue.``void` `print(queue<``int``> qr)``{``    ``while` `(!qr.empty()) {``        ``cout << qr.front() << ``" "``;``        ``qr.pop();``    ``}``    ``cout << endl;``}` `// Driver Code``int` `main()``{``    ``queue<``int``> q;` `    ``// Pushing into the queue``    ``q.push(10);``    ``q.push(20);``    ``q.push(30);``    ``q.push(40);``    ``q.push(50);``    ``q.push(60);``    ``print(q);` `    ``// Removing 39 from the queue``    ``remove``(39, q);``    ``print(q);` `    ``// Removing 30 from the queue``    ``remove``(30, q);``    ``print(q);``    ``return` `0;``}`

## Java

 `// Java program for the above approach.` `import` `java.util.*;` `class` `GFG{` `// Function to remove an element from``// the queue``static` `Queue q;``static` `void` `remove(``int` `t)``{` `    ``// Helper queue to store the elements``    ``// temporarily.``    ``Queue ref = ``new` `LinkedList<>();``    ``int` `s = q.size();``    ``int` `cnt = ``0``;` `    ``// Finding the value to be removed``    ``while` `(!q.isEmpty() && q.peek() != t) {``        ``ref.add(q.peek());``        ``q.remove();``        ``cnt++;``    ``}` `    ``// If element is not found``    ``if` `(q.isEmpty()) {``        ``System.out.print(``"element not found!!"` `+``"\n"``);``        ``while` `(!ref.isEmpty()) {` `            ``// Pushing all the elements back into q``            ``q.add(ref.peek());``            ``ref.remove();``        ``}``    ``}` `    ``// If element is found``    ``else` `{``        ``q.remove();``        ``while` `(!ref.isEmpty()) {` `            ``// Pushing all the elements back into q``            ``q.add(ref.peek());``            ``ref.remove();``        ``}``        ``int` `k = s - cnt - ``1``;``        ``while` `(k-- >``0``) {` `            ``// Pushing elements from front of q to its back``            ``int` `p = q.peek();``            ``q.remove();``            ``q.add(p);``        ``}``    ``}``}` `// Function to print all the elements``// of the queue.``static` `void` `print()``{``    ``Queue qr = ``new` `LinkedList<>(q);``    ``while` `(!qr.isEmpty()) {``        ``System.out.print(qr.peek()+ ``" "``);``        ``qr.remove();``    ``}` `    ``System.out.println();``}` `// Driver Code``public` `static` `void` `main(String[] args)``{``    ``q = ``new` `LinkedList<>();` `    ``// Pushing into the queue``    ``q.add(``10``);``    ``q.add(``20``);``    ``q.add(``30``);``    ``q.add(``40``);``    ``q.add(``50``);``    ``q.add(``60``);``    ``print();` `    ``// Removing 39 from the queue``    ``remove(``39``);``    ``print();` `    ``// Removing 30 from the queue``    ``remove(``30``);``    ``print();``}``}` `// This code is contributed by 29AjayKumar`
Output
```10 20 30 40 50 60
element not found!!
10 20 30 40 50 60
10 20 40 50 60 ```

Time Complexity: O(N)
Auxiliary Space: O(N)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

My Personal Notes arrow_drop_up