剑指 Offer 09. 用两个栈实现队列

题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
思路1:stack2模拟队列的输出顺序,插入元素前,将保留先前的元素的stack2出栈到stack1
代码:
class CQueue {
Deque stack1;
Deque stack2;
public CQueue() {
stack1 = new LinkedList();
stack2 = new LinkedList();
}

public void appendTail(int value) {
    while(!stack2.isEmpty()){
        stack1.push(stack2.pop());
    }
    stack1.push(value);
    while(!stack1.isEmpty()){
        stack2.push(stack1.pop());
    }
    
}

public int deleteHead() {
    if(stack2.isEmpty()){
        return -1;
    }
    return stack2.pop();
}

}
分析:每个元素的插入操作和删除操作的时间复杂度分别为O(n)、O(1)

思路2: stack1负责插入元素,stack2负责模拟队列的输出
代码:
class CQueue {
Deque stack1;
Deque stack2;
public CQueue() {
stack1 = new LinkedList();
stack2 = new LinkedList();
}

public void appendTail(int value) {
    stack1.push(value);
    
}

public int deleteHead() {
    if(!stack2.isEmpty()){
        return stack2.pop();
    } else{
        while(!stack1.isEmpty()){
            stack2.push(stack1.pop());
        }
        return stack2.isEmpty()?-1:stack2.pop();

    }
}

}
分析:每个元素的插入操作和删除操作的时间复杂度分别为O(1)、O(1)

剑指 Offer 09. 用两个栈实现队列

上一篇:__schedule的一些小细节


下一篇:for、while、until 例题