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 !
| About Us | Privacy Policy | Contact us |