首页 > 其他 > 详细

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

时间:2021-07-21 12:06:23      阅读:14      评论:0      收藏:0      [点我收藏+]

题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 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. 用两个栈实现队列

原文:https://www.cnblogs.com/nickyBlog/p/15038523.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!