问题描述
给定一个队列,元素分别为:1 2 3 4 5,要求反转队列前3个元素,期望结果:3 2 1 4
解题思路
需要使用一个栈和一个新队列来实现反转队列前k个元素
1、从原始队列中取出k个元素,分别压入栈中
2、从栈中弹出所有元素逐个添加到一个新队列
3、把原始队列中剩下的元素也添加到新队列中
代码实现
/**
* 反转队列前K个元素
* <p>
* 把前k个元素压栈,然后放入新队列中,最后将剩下的元素都添加到新队列中
*
* @author kaifeng
*/
public class QueueReverseK {
public static void reverseKQueue(Queue queue, int k) {
Stack stack = new Stack();
Queue newQueue = new LinkedList();
int size = queue.size();
for (int i = 0; i < k; i++) {
stack.push(queue.poll());
}
for (int i = 0; i < size; i++) {
if (i < k) {
newQueue.offer(stack.pop());
} else {
newQueue.offer(queue.poll());
}
}
//打印
while (newQueue.size() > 0) {
System.out.println(newQueue.poll());
}
}
}