package com.offer;
import java.util.Stack;
/**
* @authore Xavier
* @description 用两个栈实现一个队列
* 实现队列中的两个函数:
* appendTail: 在队尾插入节点
* deleteHead: 队列头删除节点
* @date 2018/7/20
*/
public class CQueue<E> {
/**
* 两个stack
*/
private Stack<E> stack1 = new Stack<>();
private Stack<E> stack2 = new Stack<>();
/**
* 思路: stack1负责压入; stack2负责删除;
* 统一压入stack1可保证一直在尾部;
* 删除的话,如果stack2为空,则所有的stack1元素都pop并push到stack2中,这样保证了stack2中元素顺序与压入时相同,即先进先出;
* 如果stack2不会空,则直接pop;因为stack2中元素的顺序肯定先于stack1中;
*
* @param e
*/
public void appendTail(E e) {
stack1.push(e);
}
public E deleteHead() {
if (stack2.size() <= 0) {
while (stack1.size() > 0) {
stack2.push(stack1.pop());
}
}
if (stack2.size() == 0) {
throw new RuntimeException("queue is empty");
}
return stack2.pop();
}
public static void main(String[] args) {
CQueue<Integer> cQueue = new CQueue<>();
cQueue.appendTail(1);
cQueue.appendTail(2);
System.out.println(cQueue.deleteHead());
}
}
面试题9:用两个栈实现队列
猜你喜欢
转载自blog.csdn.net/huaixiaozi90/article/details/81136683
今日推荐
周排行