博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Leecode 面试题09用两个栈实现队列
阅读量:3911 次
发布时间:2019-05-23

本文共 1965 字,大约阅读时间需要 6 分钟。

题目描述:

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

解题思路:

在进行这两个操作的时候要注意先要清空其中一个栈,这样子才比较好
1、添加到尾部:由于栈就是先进后出的特点,所以可以直接压入栈就是相当于添加到尾部
2、删除头部元素:可以直接将其中一个栈的全部元素依次压入另外一个栈,这样子在被压入的那个栈的栈顶就是原先栈的头部元素,直接使用栈的pop()方法就可以了

class CQueue {
public: CQueue() {
s1=new stack
; s2=new stack
; } void appendTail(int value) {
s1->push(value); } int deleteHead() {
if(s2->size()<=0){
while(s1->size()>0){
int top=s1->top(); s1->pop(); s2->push(top); } } if(s2->size()==0) return -1; int head=s2->top(); s2->pop(); return head; }private: stack
* s1; stack
* s2;};

执行结果如图

在这里插入图片描述
Java版的

class CQueue {
Stack
stack1; Stack
stack2; public CQueue() {
stack1 = new Stack
(); stack2 = new Stack
(); } public void appendTail(int value) {
//将stack2全部清空并依次压入stack1 while(!stack2.isEmpty()) {
stack1.push(stack2.pop()); } stack1.push(value); } public int deleteHead() {
//将stack1清空,并将stack1的数据全部依次压入stack2 while(!stack1.isEmpty()){
stack2.push(stack1.pop()); } if(stack2.isEmpty()){
return -1; }//此时stack2的栈顶元素就是stack1的栈底元素,所以可以直接使用stack2.pop()来进行达到删除头结点的目的 return stack2.pop(); } }/** * Your CQueue object will be instantiated and called as such: * CQueue obj = new CQueue(); * obj.appendTail(value); * int param_2 = obj.deleteHead(); */

在这里插入图片描述

转载地址:http://kqurn.baihongyu.com/

你可能感兴趣的文章
真正拖垮你的,是沉没成本
查看>>
Docker:恢复对开源项目的无限制访问
查看>>
Blazor 准备好为企业服务了吗?
查看>>
.NET5全面拥抱Azure云,微软市值重回巅峰,那些年吹过的牛,都实现了!
查看>>
C# 中的 ref 已经被放开,或许你已经不认识了
查看>>
C#刷剑指Offer | 【常考题】最小的k个数
查看>>
【专题】多角度深入解析开放原子开源基金会
查看>>
在 Azure App Service 上启用 Application Request Routing
查看>>
使用 Xunit.DependencyInjection 改造测试项目
查看>>
谈谈.NET Core IServiceProvider
查看>>
一个.NET Core下的开源插件框架Pluginfactory
查看>>
基于阿里云日志服务快速打造简版业务监控看板
查看>>
集赞有礼!进击吧! Blazor !第六期 企业内部应用建设实战
查看>>
大象起舞——微软研发如何保持创新力和敏捷性
查看>>
Newbe.ObjectVisitor 0.2.10 发布,更花里胡哨
查看>>
寻找性能更优秀的动态 Getter 和 Setter 方案
查看>>
跟我一起学.NetCore之EF Core 实战入门,一看就会
查看>>
.NET架构小技巧(8)——优待异常
查看>>
一款基于.NET Core的认证授权解决方案-葫芦藤1.0开源啦
查看>>
寻找性能更优秀的不可变小字典
查看>>