题目描述
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
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.empty())
{
return stack2.pop();
}
else
{
if(stack1.isEmpty())
{
throw new Exception("栈已为空,不能弹出");
}
while(!stack1.empty())
{
stack2.push(stack1.pop());
}
return stack2.pop();
}
}
}
元素都先压入stack1中,当需要删除时,压入stack2中完成删除操作
两个栈实现一个队列很简单,因为栈本身的特性,会出现逆序,有助于删除操作;但两个队列实现栈就相对比较困难,因为队列一直是顺序的,不会出现逆序,不利于删除操作,需要额外处理
重点:重中之重
if(stack1.isEmpty())
{
throw new Exception("栈已为空,不能弹出");
}
题目描述
用两个队列来实现一个栈,完成栈的add和remove操作。 栈中的元素为int类型。
添加:在不为空的队列中添加
删除:只留一个元素,剩余元素移入另一个队列,对单独的元素进行删除
import java.util.*;
public class Solution {
LinkedList<Integer> queue1=new LinkedList<Integer>();
LinkedList<Integer> queue2=new LinkedList<Integer>();
public void push(int node) {
queue1.add(node);
}
public int pop() throws Exception{
if(queue1.size()==0)
{
throw new Exception("栈已空,无法弹出元素");
}
for(int i=0;i<queue1.size()-1;i++)
{
queue2.add(queue1.get(i));
}
int len=queue1.size()-1;
for(int i=0;i<len;i++)//这是个坑,queue1删除元素后长度会发生变化
{
queue1.remove();
}
int num=queue1.getFirst();
queue1.remove();
for(int i=0;i<queue2.size();i++)
{
queue1.add(queue2.get(i));
}
len=queue2.size();
for(int i=0;i<len;i++)
{
queue2.remove();
}
return num;
}
}