| Input Parameters |
Expected outputs |
QueuePriority queue=new QueuePriority();
queue.addByPriority(99);
queue.addByPriority(14);
queue.addByPriority(77);
queue.addByPriority(34);
queue.addByPriority(21);
queue.addByPriority(82);
QueueRotate queueRotate=new QueueRotate();
queueRotate.QueueRotate(queue, 3);
|
Queue nodes: 14 <- 21 <- 34 <- 77 <- 99
After rotation:
Queue nodes: 77 <- 99 <-14 <- 21 <- 34
|
| queueRotate.QueueRotate(queue, 5);
|
Queue nodes: 34 <-44<-55<-77<- 99
After rotation:
Queue nodes: 34 <-44<-55<-77<- 99
|
| queueRotate.QueueRotate(queue, 10);
|
Queue nodes: 34 <-44<-55<-77<- 99
After rotation:
Queue nodes: 34 <-44<-55<-77<- 99
|
| queueRotate.QueueRotate(queue, 12);
|
Queue nodes: 34 <-44<-55<-77<- 99
After rotation:
Queue nodes: 55<-77<- 99<-34 <-44
|
| If we have to rotate n nodes, n may be greater than size of queue, so Calculate effective nodesToBeRotated as (n % queue.size()).
|
| Iterate through Queue nodesToBeRotated times using for loop and remove elements from start of Queue and add the same to the end of the Queue.
|
Below fully running code can be copied and run on Eclipse or other Java IDEs. Refer the classname in code below. If the class name below is "A", save the code below to a file named A.java before running it.
Be sure to try your own test cases to enhance your understanding !
You can also tweak the code to optimize or add enhancements and custom features.
import java.util.*;
import java.util.Queue;
public class QueueRotate {
public Queue< Integer > QueueRotate(Queue< Integer > queue, int n) {
int nodesToBeMoved= n % queue.size();
for (int cnt=0; cnt < nodesToBeMoved; cnt++) {
queue.add(queue.remove());
}
return queue;
}
public static void printQueue(Queue< Integer > queue) throws Exception {
if (queue.size() == 0) { System.out.println("Queue empty"); return; }
System.out.println();
System.out.println("*********************************************************************");
System.out.print("Queue nodes: ");
Iterator itr=queue.iterator();
while (itr.hasNext()) {
System.out.print(itr.next());
System.out.print(" <- ");
}
System.out.println();
System.out.println("*********************************************************************");
System.out.println();
Thread.sleep(2000);
return;
}
public static void main(String[] args) {
/* Test cases given below: */
int[] retVal;
try {
Queue<Integer> queue=new LinkedList<Integer>();
queue.add(9);
queue.add(14);
queue.add(17);
queue.add(34);
queue.add(21);
queue.add(28);
queue.add(21);
queue.add(14);
queue.add(21);
queue.add(33);
printQueue(queue);
System.out.print("Rotate by 3 places:");
QueueRotate queueRotate=new QueueRotate();
queue=queueRotate.QueueRotate(queue, 3);
printQueue(queue);
System.out.print("Rotate by 5 places:");
queueRotate=new QueueRotate();
queue=queueRotate.QueueRotate(queue, 5);
printQueue(queue);
System.out.print("Rotate by 10 places:");
queueRotate=new QueueRotate();
queue=queueRotate.QueueRotate(queue, 10);
printQueue(queue);
System.out.print("Rotate by 12 places:");
queueRotate=new QueueRotate();
queue=queueRotate.QueueRotate(queue, 12);
printQueue(queue);
System.out.print("Rotate by 21 places:");
queueRotate=new QueueRotate();
queue=queueRotate.QueueRotate(queue, 21);
printQueue(queue);
}catch (Exception exception) {
System.out.print("Exception: "+ exception);
exception.printStackTrace();
}
}
}