一把王者荣耀的时间打卡剑指 Offer简单入门题

第 1 天栈与队列(简单)

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

难度简单

用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )

示例 1:

输入:
["CQueue","appendTail","deleteHead","deleteHead"]
[[],[3],[],[]]
输出:[null,null,3,-1]

 解题思路提示:

class CQueue {
    LinkedList<Integer> A,B;
    public CQueue() {
        A =new LinkedList<Integer>();
        B =new LinkedList<Integer>();
    }
    
    public void appendTail(int value) {
        //队列尾部插入整数
        A.add(value);
    }
    
    public int deleteHead() {
       // 队列头部删除整数的功能
       if(!B.isEmpty()){return B.removeLast();}
        //队列中没有元素,deleteHead 操作返回 -1
        if(A.isEmpty()){
            return -1;
        }
        while(!A.isEmpty()){
            B.add(A.removeLast());}
            return B.removeLast();
        
    }
}

如果你使用Stack的方式来做这道题,会造成速度较慢; 原因的话是Stack继承了Vector接口,而Vector底层是一个Object[]数组,那么就要考虑空间扩容和移位的问题了。 可以使用LinkedList来做Stack的容器,因为LinkedList实现了Deque接口,所以Stack能做的事LinkedList都能做,其本身结构是个双向链表,扩容消耗少

但是,Vector Stack 这些 Java 集合框架中已经被“遗弃”, Stack 已经被 Java 官方说明不推荐使用了

Stack知识补充

结构:队列数组

特点:线程安全,是Vector的子类,有自己特有的方法

booleanempty()
          测试堆栈是否为空。
 Epeek()
          查看堆栈顶部的对象,但不从堆栈中移除它。
 Epop()
          移除堆栈顶部的对象,并作为此函数的值返回该对象。
 Epush(E item)
          把项压入堆栈顶部。
 intsearch(Object o)
          返回对象在堆栈中的位置,以 1 为基数。

LinkedList知识补充

结构:双向链表

特点:线程不安全,插入删除快,查询慢

常用方法:

名称

概述

备注

add(E e)

添加

向集合中最后添加一个元素

add(int index ,E e)

插入

addAll(Collection c)

批量添加

addFirst(E e)

插入到第一个

addLast(E e)

插入到最后一个

同add(E e)

remove(int index)

删除

按照索引删除

remove(E e)

删除

按照内容删除

removeFirst()

移除并返回此列表的第一个元素

removeLast()

移除并返回此列表的最后一个元素

clear()

清空

E e = get(int index)

获取到指定位置(索引)的元素

E e = getFirst()

获取第一个

E e = getLast()

获取最后一个

set(int index,E e)

修改

修改指定位置的元素

int size = size()

获取集合长度

Object[]array = list.toArray()

将集合转换成数组

 Epop()
          从此列表所表示的堆栈处弹出一个元素。
 voidpush(E e)
          将元素推入此列表所表示的堆栈。

用作复习参考博客,不喜勿喷!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值