package main.coding_170507; import java.util.EmptyStackException; import java.util.LinkedList; /** * Created by peterchen on 2017/5/5. */ public class StackWithTwoQueues { private Queue queue1; private Queue queue2; public StackWithTwoQueues() { queue1 = new Queue(); queue2 = new Queue(); } public void push(int data) { queue1.enQueue(data); } public int pop() { if (queue1.isEmpty()) { throw new EmptyStackException(); } int currentLength = queue1.size(); for (int i = 0; i < currentLength - 1; i++) { queue2.enQueue(queue1.deQueue()); } int data = queue1.deQueue(); while (!queue2.isEmpty()) { queue1.enQueue(queue2.deQueue()); } return data; } private class Queue { private LinkedList<Integer> linkedList = new LinkedList<>(); public boolean isEmpty() { return linkedList.size() == 0; } public int size() { return linkedList.size(); } public void enQueue(Integer data) { linkedList.add(data); } public Integer deQueue() { int data = linkedList.removeFirst(); return data; } } public static void main(String[] args) { StackWithTwoQueues stackWithTwoQueues = new StackWithTwoQueues(); stackWithTwoQueues.push(10); stackWithTwoQueues.push(20); stackWithTwoQueues.push(30); System.out.println(stackWithTwoQueues.pop()); } }