题目:
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解:
解法一:
class CQueue {
LinkedList<Integer> A, B;
public CQueue() {
A = new LinkedList<Integer>(); //维护插入
B = new LinkedList<Integer>(); //维护删除
}
public void appendTail(int value) {
A.addLast(value); //addLast():在链表尾部添加元素
}
public int deleteHead() {
if(!B.isEmpty()) return B.removeLast(); //如果B不为空,则删除B最后一个元素
if(A.isEmpty()) return -1; //如果A为空,则返回-1
while(!A.isEmpty()){ //如果A不为空,则将A中元素倒序放入B中,则A队首为为B队尾,先从B中删除
B.addLast(A.removeLast());
}
return B.removeLast();
}
}
/**
* Your CQueue object will be instantiated and called as such:
* CQueue obj = new CQueue();
* obj.appendTail(value);
* int param_2 = obj.deleteHead();
*/
笔记:
(1)解题思路:使用两个链表维护,A用于插入,B用于删除,当准备删除时,先从B删,然后将A中元素倒序放入B中
(2)
LinkedList<> | 链表 | 和ArrayList类似,但增删效率更高,查改效率低 |
void addLast() | 在链表尾部添加元素 | void addFirst(),boolean add() |
boolean isEmpty() | 是否为空 | int size() |
E removeLast() | 删除链表最后一个元素 | E removeFirst() |