剑指offer第二版-9.用两个栈实现队列

时间:2023-03-09 16:28:19
剑指offer第二版-9.用两个栈实现队列

描述:使用两个栈实现一个队列。队列中实现尾部插入和头部删除函数。

思路:stack1负责插入,stack2负责弹出,如果stack2为空了,将stack1的元素依次弹出并存放到stack2中,之后对stack2进行弹出操作。

考点:对栈和队列的理解;对泛型的使用等。

/**
* Copyright(C) 2019 Hangzhou Differsoft Co., Ltd. All rights reserved.
*
*/
package com.java.offer; import java.util.Stack; /**
* 用两个栈实现队列
*
* @since 2019年2月25日 下午5:21:48
* @author xuchao
*
*/
public class P9_QueueWithTwoStacks { public static void main(String[] args) {
Queue<Integer> queue = new Queue<>();
queue.insert(1);
queue.insert(2);
queue.insert(3);
System.out.println(queue.delete());
System.out.println(queue.delete());
queue.insert(4);
System.out.println(queue.delete());
}
} class Queue<T> {
private Stack<T> stack1 = new Stack<>();
private Stack<T> stack2 = new Stack<>(); public void insert(T data) {
stack1.push(data);
} public T delete() {
if (!stack2.isEmpty()) {
return stack2.pop();
}else if(!stack1.isEmpty()) {
while(!stack1.isEmpty()) {
stack2.push(stack1.pop());
}
return stack2.pop();
}
return null;
}
}