剑指Offer_07 用两个栈实现队列与 用两个队列实现栈
2016-08-22 21:06
549 查看
用两个栈实现队列与 用两个队列实现栈。 思路:1.两个栈实现队列。队列先进先出,可以使用栈1进数据,实现appendTail()方法。当队列出数据时,判断栈2是否为空,不为空,栈2.pop(),实现deletedHead()方法,为空则将栈1中数据pop后存入栈2中,实现deletedHead()方法。 ![这里写图片描述](http://img.blog.csdn.net/20150728082302972?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center) 2。两个队列实现栈。栈先进后出,可以使用队列1进数据(判断队列1,队列2哪个有数据,若队列1(2)有数据存入队列1(2),否则随意存入一个队列,实现pop()方法。当栈弹出数据时,把队列1的数据弹出,存入队列2中(当弹出数据后队列1为空,则该数据不存入队列2,只弹出队列1),此时队列2就是栈弹出数据后的结果。 ![这里写图片描述](http://img.blog.csdn.net/20150728082509430?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center) 代码:1.两个栈实现队列
/** * 用两个栈实现一个队列,完成两个函数appendTail和deletedHead,分别是在队列尾部插入节点 * 和在队列头部删除节点的功能 */ private Stack<String> stack1 = new Stack<String>(); private Stack<String> stack2 = new Stack<String>(); public void appendTail(String s){ stack1.push(s); } public String deletedHead() throws Exception{ if(stack2.isEmpty()){ while(!stack1.isEmpty()){ stack2.push(stack1.pop()); } } if(stack2.isEmpty()){ throw new Exception("队列为空,不能删除"); } return stack2.pop(); }
2.两个队列实现栈
private LinkedList<String> queue1 = new LinkedList<String>(); private LinkedList<String> queue2 = new LinkedList<String>(); public String pop(){ String re =null; if(queue1.size() == 0 && queue2.size() == 0){ return null; } if(queue2.size() == 0){ while(queue1.size() >0){ re = queue1.removeFirst(); if(queue1.size() != 0){ queue2.addLast(re); } } }else if(queue1.size() == 0){ while(queue2.size() >0){ re = queue2.removeFirst(); if(queue2.size()!=0){ queue1.addLast(re); } } } return re; } public String push(String str){ if(queue1.size() ==0 && queue2.size() == 0){ queue1.addLast(str); }else if(queue1.size()!=0){ queue1.addLast(str); }else if(queue2.size()!=0){ queue2.addLast(str); } return str; }
相关文章推荐
- [剑指offer][面试题07-扩展]用两个队列实现栈
- 剑指Offer-【面试题07:两个栈实现队列】
- 剑指Offer_面试题07_用两个栈实现队列
- 剑指offer-面试题07-用两个栈实现队列
- [剑指offer][面试题07]用两个栈实现队列
- 剑指offer-07(1):两个队列实现栈
- 剑指offer编程题——07 两个栈实现队列
- 剑指offer-07:两个栈实现队列
- 剑指offer-面试题07-衍生题目:用两个队列实现栈
- 【剑指offer-Java版】07用两个栈实现队列
- 【剑指offer】面试题07:用两个栈实现队列
- 【剑指offer】两个队列实现一个栈
- 【剑指offer 面试题7】用两个栈实现队列
- 【剑指Offer学习】【面试题7:用两个栈实现队列】
- 【剑指Offer面试编程题】题目1512:用两个栈实现队列--九度OJ
- 剑指offer之用两个栈实现队列
- [剑指OFFER] 用两个栈实现队列
- [剑指Offer]9.用两个栈实现队列
- 【剑指offer】面试题7:用两个栈实现队列
- 【剑指offer】面试题:两个队列实现栈