Learn-dsa..in 30 days!



























CC-9 : Reverse k nodes of a Queue.

Description:

Given a Queue, reverse first k nodes of the same in the Queue.

Test cases and expected outputs:

Input Parameters Expected outputs
Queue queue=new Queue();
queue.addByPriority(99);
queue.addByPriority(14);
queue.addByPriority(77);
queue.addByPriority(34);
queue.addByPriority(21);
queue.addByPriority(82);
queue.queueReverseKNodes(queue, 3);
Queue nodes: 14 <- 21 <- 34 <- 77 <- 99
After reversal:
Queue nodes: 34 <- 21 <-14 <- 77 <- 99
queue.queueReverseKNodes(queue, 4); Queue nodes: 34 <-44<-55<-77<- 99
After reversal:
Queue nodes: 77<-55<-44<-37<- 99
queueRotate.QueueRotate(queue, 1); Queue nodes: 34 <-44<-55<-77<- 99
After rotation:
Queue nodes: 34 <-44<-55<-77<- 99

Pseudocode:

Size of input Queue is n, and k nodes are to be reversed.
Initialize a new Deque.
Remove k nodes from input Queue and add the same to end of Deque.
Remove k nodes from the end of Deque and add to Queue.
• Above step reverses the first k nodes of Queue, but these are at end of updated Queue instead of start. So, remove n-k nodes from start of Queue and add to end of Queue. Now we have Queue with first k nodes reversed.

Code:

public Queue< Integer > queueReverseKNodes(Queue< Integer > queue, int k) throws Exception {	
	Deque< Integer > deque=new LinkedList<Integer>();
	int oSize=queue.size();
	for (int idx=0; idx < k;idx++) {
		deque.addLast(queue.remove());
	}
	for (int idx=0; idx < k;idx++) {
		queue.add(deque.removeLast());
	}
	for (int idx=0; idx < oSize-k;idx++) {
		queue.add(queue.remove());
	}	
	return queue;
}   

Click here to download and run code and test cases !