Java中的栈和队列操作,相互实现(力扣 232, 225)

栈和队列(Java)

  • Java中的 栈 & 队列 操作
    • 栈的使用
    • 队列的使用
  • LeetCode 232. 用栈实现队列
    • 我的代码
  • LeetCode 225. 用队列实现栈
    • 我的代码

Java中的 栈 & 队列 操作

栈的使用

栈的方法 功能
Stack() 构造一个空的栈
E push(E e) 将e入栈,并返回e
E pop() 将栈顶元素出栈并返回
E peek() 获取栈顶元素
int size() 获取栈中有效元素个数
Boolean empty() 检测栈是否为空
Stack<String> s = new Stack<>();
Stack<Intger> s2 = new Stack<>();

队列的使用

队列的方法 功能
Boolean offer(E e) 入队列
E poll() 队头元素出队列并返回
E peek() 获取队头元素
int size() 获取队列中有效元素个数
Boolean isEmpty() 检测队列是否为空

注意: Queue 是个接口,在实例化时必须实例化 LinkedList 的对象,因为 LinkedList 实现了 Queue 接口。

Queue<Integer> q = new LinkedList<>();

LeetCode 232. 用栈实现队列

出错点分析:
①栈的新建不会写、栈的操作方法不清楚
②可以看到 pop 和 peek 函数实现的逻辑都是一样的,很冗余,没有示例代码写的简洁

我的代码

class MyQueue {
    Stack<Integer> s1 = new Stack<>();
    Stack<Integer> s2 = new Stack<>();

    public MyQueue() {
    }
    
    public void push(int x) {
        s1.push(x);
    }
    
    public int pop() {
        while(s1.size() != 0) {
            int tmp = s1.pop();
            s2.push(tmp);
        }
        int ans = s2.pop();
        while(s2.size() != 0) {
            int tmp = s2.pop();
            s1.push(tmp);
        }
        return ans;
    }
    
    public int peek() {
        while(s1.size() != 0) {
            int tmp = s1.pop();
            s2.push(tmp);
        }
        int ans = s2.peek();
        while(s2.size() != 0) {
            int tmp = s2.pop();
            s1.push(tmp);
        }
        return ans;
    }
    
    public boolean empty() {
        return s1.empty();
    }
}

在这里插入图片描述

LeetCode 225. 用队列实现栈

出错点分析:
①队列的新建不会写、队列的操作方法不清楚
②可以看到 pop 和 top 函数实现的逻辑都是一样的,很冗余,没有示例代码写的简洁

我的代码

class MyStack {

    Queue<Integer> q1=new LinkedList<>();
    Queue<Integer> q2=new LinkedList<>();

    public MyStack() {

    }
    
    public void push(int x) {
        q1.offer(x);
    }
    
    public int pop() {
        //移除并返回栈顶元素。
        while(q1.size() != 1) {
            int tmp = q1.poll();
            q2.offer(tmp);
        }
        int ans = q1.poll();
        while(q2.size() != 0) {
            int tmp = q2.poll();
            q1.offer(tmp);
        }

        return ans;
    }
    
    public int top() {
        int ans = -1;//要赋初值
        while(q1.size() != 0) {
            int tmp = q1.poll();
            q2.offer(tmp);
            if(q1.size() == 0) { //是等于0的时候而不是等于1,因为poll操作暗含了size-1
                ans = tmp;
            }
        }
        
        while(q2.size() != 0) {
            int tmp = q2.poll();
            q1.offer(tmp);
        }

        return ans;
    }
    
    public boolean empty() {
        return q1.isEmpty();
    }
}

在这里插入图片描述

你可能感兴趣的:(LeetCode做题总结,java,leetcode)