此博客链接:https://www.cnblogs.com/ping2yingshi/p/12796491.html
用两个栈实现队列()
题目链接:https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof/
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
示例 1:
输入:
["CQueue","appendTail","deleteHead","deleteHead"]
[[],[3],[],[]]
输出:[null,null,3,-1]
示例 2:
输入:
["CQueue","deleteHead","appendTail","appendTail","deleteHead","deleteHead"]
[[],[],[5],[2],[],[]]
输出:[null,-1,null,null,5,2]
题解:
题意:实现两个函数appendTail 和 deleteHead,在尾部插入,在头删除。给的示例,上面给的是操作,下面是操作后实现了什么。
例如例1:输入了CQueue创建了一个队列,然后输入appendTail",在队列中添加了一个3,deleteHead删除3后,队列里为空。
思路:
1.建立两个栈。
2.用一个栈添加元素。
3.用一个栈来删除元素,注意这里是在头部删除节点,而元素入栈时,会把头部元素放到栈底,所以需要利用另外一个栈,把当前添加元素的栈元素出栈stack1,重新入栈到stack2中,然后取stack2的栈顶元素即为栈顶元素。
代码如下:
class CQueue { public Stack<Integer> stack1; public Stack<Integer> stack2; public CQueue() { stack1=new Stack<Integer>(); stack2=new Stack<Integer>(); } public void appendTail(int value) { stack1.push(value); } public int deleteHead() { if(stack2.size()<=0) { if(stack1.size()<=0){ return -1; } for(int i=stack1.size();i>0;i--) { stack2.push(stack1.pop()); } } return stack2.pop(); } }