Leetcode 225. 用队列实现栈

请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。

实现 MyStack 类:

void push(int x) 将元素 x 压入栈顶。
int pop() 移除并返回栈顶元素。
int top() 返回栈顶元素。
boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。

用队列实现栈的关键,在于怎样去实现pop和top中仿照栈的后进先出操作。

其实只需要一个队列就可以解决该问题。例如入队顺序是123,按照栈的弹出操作需要取3,而取3的唯一方法是先取出1和2。我们可以先分别将1和2取出放在队列末尾,此时不论是pop弹出栈顶还是top查询栈顶都可以取到3。

所以我们可以先定义一个函数,用于将队列中除最后一个的所有元素全部移进队尾,这样原队尾元素就成为队头。若要弹出则直接用出队列操作即可;若要查询则可在取到队头后,再将该队头元素插入队尾。

实现代码如下:

class MyStack {
	
	Queue <Integer> q; 

    public MyStack() {
    	q = new LinkedList<Integer>();
    }
    
    public void push(int x) {
    	q.offer(x);
    }
    
    public int pop() {
    	Queue2Stack(q);
    	int temp = q.poll();
    	return temp;
    }
    
    public int top() {
    	Queue2Stack(q);
		int temp = q.poll();
		q.offer(temp);
    	return temp;
    }
    
    public boolean empty() {
    	return q.isEmpty();
    }
    
    public void Queue2Stack(Queue<Integer> q) {
    	for(int i=1;i<q.size();i++) {
    		int temp = q.poll();
    		q.offer(temp);
    	}

    }
    
}

/**
 * Your MyStack object will be instantiated and called as such:
 * MyStack obj = new MyStack();
 * obj.push(x);
 * int param_2 = obj.pop();
 * int param_3 = obj.top();
 * boolean param_4 = obj.empty();
 */
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

maplesea7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值