(1)
题目描述
用两个栈实现一个队列,完成队列的Push和Pop操作。队列中的元素为int类型。
解题思路
这道题就是利用两个栈“先进后出”得出“先进先出”,可以实现队列功能,但是注意的是stack1需要将全部的数导入stack2,如果stack2存在数则不能从stack1导数进去,需要注意这两点。
import java.util.Stack;
public class Solution {
Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();
public void push(int node) {
stack1.push(node);
}
public int pop() {
if(stack2.isEmpty()){
while(!stack1.isEmpty()){
stack2.push(stack1.pop());
}
}
return stack2.pop();
}
}
(2)
题目描述
使用两个队列实现一个栈的功能,具有队列的先进后出的功能。
解题思路
实现栈的push功能就是把数永远放在不为空的队列上,腾出一个空的队列用来存放pop的操作。实现栈的pop操作就是把队列里面的全部内容导入一个空的队列,剩下一个就是poll()出来,这样就可以实现“先进后出”,每次push操作就是以此循化,每次pop操作也是以此循环。
import java.util.LinkedList;
public class StackByTwoQueues{
private LinkedList<String> queueOne = new LinkedList<>();
private LinkedList<String> queueTwo = new LinkedList<>();
// stack push
public void push(String str){
// always one queue is empty and the other is not empty
// and push the str val into not empty queue
if(queueOne.isEmpty()){
queueTwo.add(str);
}
if(queueTwo.isEmpty()){
queueOne.add(str);
}
}
// stack pop
public String pop(){
if(queueOne.isEmpty() && queueTwo.isEmpty()){
try{
throw new Exception("stack is empty");
}catch(Exception e){
// todo
}
}
if(queueOne.isEmpty()){
while(queueTwo.size() > 1){
queueOne.add(queueTwo.poll());
}
return queueTwo.pop();
}
if(queueTwo.isEmpty()){
while(queueOne.size() > 1){
queueTwo.add(queueOne.poll());
}
return queueOne.poll();
}
return null;
}
public static void main(String[] args) {
}
}
以上就是栈与队列的相互实现