m0_59657805 2024-02-23 17:25 采纳率: 20%
浏览 7
已结题

Java用队列实现栈

在做leetcode这道用队列实现栈问题题的时候

class MyStack {

    Queue<Integer> queue;

    public MyStack() {
        queue = new LinkedList<>();
    }
    
    public void push(int x) {
        queue.add(x);
    }
    
    public int pop() {
        int size = queue.size();
        size--;
        while(size-->0){
            queue.add(queue.poll());
        }
        
        return queue.poll();
    }
    
    public int top() {
        int size = queue.size();
        size--;
        while(size-->0){
            queue.add(queue.poll());
        }
        
      **  int result = queue.poll();
        queue.add(result);
        return result;**
        // int result = queue.peek();
        // return result;
        //为什么只使用return queue.peek()不对?
    }
    
    public boolean empty() {
        return queue.size()==0;

    }
}

使用**  int result = queue.poll();
        queue.add(result);
        return result;**得到的结果就是正确的
["MyStack","push","push","top","pop","empty"]
[[],[1],[2],[],[],[]]
输出
[null,null,null,2,2,false]
预期结果
[null,null,null,2,2,false]
使用
// int result = queue.peek();
        // return result;
得到的结果:
输入
["MyStack","push","push","top","pop","empty"]
[[],[1],[2],[],[],[]]
输出
[null,null,null,2,1,false]
预期结果
[null,null,null,2,2,false]

想请问为什么?我只是获得顶端的元素,以上两种方式获得的元素应该是一样的,为什么会有错呢?是因为我没把队列返回成原样导致后续放进去不正确的问题吗?

  • 写回答

3条回答 默认 最新

  • Bianca1 2024-02-23 18:11
    关注

    因为你的 top 方法一开始反转了队列, 第一种情况 ,用poll出队列头部,加入队列尾部, 你翻转了回去。 第二种 peek 不会改变原队列。 而你的 pop方法 又反转了一遍。 也就是第二种情况你翻转了两遍,又变回原样了, 所以你第二种错误了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月5日
  • 已采纳回答 2月26日
  • 创建了问题 2月23日

悬赏问题

  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)
  • ¥50 mac mini外接显示器 画质字体模糊
  • ¥15 TLS1.2协议通信解密
  • ¥40 图书信息管理系统程序编写
  • ¥20 Qcustomplot缩小曲线形状问题
  • ¥15 企业资源规划ERP沙盘模拟