请问这样实现是正确的吗?

来源:3-3 作业解析:用栈实现队列

warren_au

2020-09-06 15:25:59

public void push(int x){
   stack.add(x);
}

public int pop(){
   Stack<Integer> stack2 = new Stack<>();
   while (stack.size()>1){
       stack2.add(stack.pop());
   }
   int ret=stack.pop();
   for(int i=0;i<stack2.size();i++){
       stack.add(stack2.pop());
   }
   return ret;
}

写回答

1回答

liuyubobobo

2020-09-06

pop 的思路虽然可以,但是这样做 pop 是固定 O(n) 级别复杂度的,性能较差。提交给 leetcode 试试看?


另外,你的实现中,

for(int i=0;i<stack2.size();i++){
    stack.add(stack2.pop());
}

无法做到把 stack2 的所有元素放入 stack,想象看为什么?


继续加油!:)


1
hiuyubobobo
回复
harren_au
h 不要看,去调试。正确的代码不是看出来的,是调出来的。你已经知道了在什么测试用例下有错误,去实际跟踪,看程序运行的每一步,每个变量在怎么变化?和你预想的逻辑是否一样?如果不一样,是你想错了?还是程序错了?这是学习编程,提高编程能力的重要方法。写代码不是解数学题,计算机是工科,工科不是理论的推导,而是实际的运行。切记!加油!
h020-09-07
共4条回复

算法与数据结构

波波老师5年集大成之作,算法与数据结构系统学习,考试、面试、竞赛通用

2603 学习 · 1086 问题

查看课程