C++ Write a function void headEnqueue(Queue *q, int key) which enqueues the key such that, at function exit, it is positioned at the head of the queue rather than the tail; and the order and integrity of the queue is otherwise maintained. Solution struct node { int data; node* next; }; class Queue //linked_list class { private: node* front; node* rear; public: Queue(); void insert(int); headEnqueue(Queue *q, int key); }; Queue::Queue() { front = rear = NULL; } void Queue::insert(int val) { node* temp = new node; temp->data = val; temp->next = NULL; if (front == NULL) front= rear = temp; else { node* temp1 = front; while (temp1->next) temp1 = temp1->next; temp1->next = temp; } } void Queue::headEnqueue(Queue *q, int key) { node* temp = new node; temp->data = key; temp->next=q->front; q->front=temp; }.