剑指Offer面试题7用两个栈实现队列(附带用两个队列实现栈)
来源:互联网 发布:印度人在中国 知乎 编辑:程序博客网 时间:2024/05/17 08:48
面试题7:用两个栈实现队列
完成两个函数appendTail和deletedHead,分别是在队列尾部插入节点和在队列头部删除节点的功能。
思路:添加元素即压入一个栈s1,删除元素的话,把s1中的元素按顺序先弹出再压入栈s2中,这是弹出栈s2的元素就能实现先进先出了。
相关题:用两个队列实现栈。
思路:添加元素即向一个队列q1添加元素,删除元素的话,把q1的元素按顺序出队然后入队到q2,最后q1剩下一个元素,就是要出栈的元素,再添加元素的话,向非空的队列添加。
用两个栈实现队列的Java实现:
public class CQueue {private Stack<Integer> stack1 = new Stack<>();private Stack<Integer> stack2 = new Stack<>();public void appendTail(int elem){//添加元素就直接向stack1添加stack1.push(elem);System.out.println("stack1:" + stack1.toString());}public void deleteHead(){//删除分三种情况:1,stack2不空,直接从它里头弹出。2,stack2空,stack1不空,把1中先弹再压到2,再从2弹出。3,两都空。if(!stack2.isEmpty()){stack2.pop();}else if(!stack1.isEmpty()){while(!stack1.isEmpty()){stack2.push(stack1.pop());}stack2.pop();}else{System.out.println("两个栈都空了");}System.out.println("stack1:" + stack1.toString());System.out.println("stack2:" + stack2.toString());}public static void main(String[] args) {CQueue test = new CQueue();test.appendTail(1);test.appendTail(2);test.appendTail(3);test.deleteHead();test.deleteHead();test.appendTail(4);test.deleteHead();}}
用两个队列实现栈的Java实现:
import java.util.Queue;import java.util.LinkedList;//以下是相关题,两个队列实现栈。public class CStack {//是LinkedList类实现了Queue接口private static Queue<Integer> queue1 = new LinkedList<>();private static Queue<Integer> queue2 = new LinkedList<>();private void appendTail(int elem){//Queue使用时要尽量避免Collection的add()和remove()方法,而是要使用offer()来加入元素,使用poll()来获取并移出元素。//它们的优点是通过返回值可以判断成功与否,add()和remove()方法在失败的时候会抛出异常。 //如果要使用前端而不移出该元素,使用element()或者peek()方法。//这里是向非空的队列里添加值。都为空的话向队列1添加。if(!queue2.isEmpty()){queue2.offer(elem);}else{queue1.offer(elem);}System.out.println("queue1:" + queue1.toString());System.out.println("queue2:" + queue2.toString());}private void deleteHead(){//一个表示空队列,一个表示非空队列Queue<Integer> emptyQueue = queue1;Queue<Integer> notEmptyQueue = queue2;if(!emptyQueue.isEmpty()){emptyQueue = queue2;notEmptyQueue = queue1;}//除了非空队列的最后一个元素,别的都按顺序移到空队列while(notEmptyQueue.size()!=1){emptyQueue.offer(notEmptyQueue.poll());}//删除刚才留下的最后一个元素notEmptyQueue.poll();System.out.println("queue1:" + queue1.toString());System.out.println("queue2:" + queue2.toString());}public static void main(String[] args) {CStack test = new CStack();test.appendTail(1);test.appendTail(2);test.appendTail(3);test.deleteHead();test.appendTail(4);test.deleteHead();}}
0 0
- 剑指Offer面试题7用两个栈实现队列(附带用两个队列实现栈)
- 剑指offer-->面试题7 用两个栈实现队列
- 【剑指offer】面试题7:用两个栈实现队列
- 剑指Offer:面试题7 用两个栈实现队列
- 《剑指Offer》面试题7:用两个栈实现队列
- 【剑指offer】 面试题7: 用两个栈实现队列
- 【剑指offer】面试题7:用两个栈实现队列
- 剑指offer-面试题7:用两个栈实现队列
- 剑指offer---面试题7 用两个栈实现队列
- 剑指offer面试题7:用两个栈实现队列
- 剑指Offer面试题7用两个栈实现队列
- 【剑指offer】面试题7:用两个栈实现队列
- 剑指offer面试题7:用两个栈实现队列
- 剑指offer--面试题7: 用两个栈实现队列
- 剑指offer-面试题7-用两个栈实现队列
- 【剑指offer】面试题7:用两个栈实现队列
- 剑指offer 面试题7 用两个栈实现队列
- 剑指offer面试题[7]-用两个栈实现队列
- MVC新手指南
- Kafka文件的存储机制
- spark多路输出
- TimesTen支持缓存视图吗
- 编程的书籍
- 剑指Offer面试题7用两个栈实现队列(附带用两个队列实现栈)
- 关于Pwt和Pwtpolar的编译和使用
- DataBinding 学习系列(6)最后的实战---RecyclerView
- 算法3:给一个字符数组(a-z),如何打印该数组成员构成集合的全部子集合
- Android7.0下调用相机闪退的解决方案
- jvm调优笔记(一)
- JAVA 类加载
- concatgroup_concatmysql行转列列转行concat_wsmysql连接字符串
- MySQL约束:非空约束、主键约束、唯一约束、默认约束、外键约束