Java 不使用peek()从堆栈中删除元素
我有一堆Java 不使用peek()从堆栈中删除元素,java,stack,Java,Stack,我有一堆s的Student对象和一个Student对象e。 如何在不使用s.peek()方法的情况下删除e最上面出现的堆栈的所有元素?弹出顶部元素,如果弹出的元素是“e”,则将其推回到堆栈上。否则,再次弹出堆栈。弹出顶部元素,如果弹出的元素是“e”,则将其推回到堆栈上。否则,再次弹出堆栈。弹出直到遇到e,然后再次按下e Student top = null; while(!s.isEmpty() && !e.equals(top)){ top = s.pop(); } i
s
的Student
对象和一个Student
对象e
。
如何在不使用
s.peek()
方法的情况下删除e
最上面出现的堆栈的所有元素?弹出顶部元素,如果弹出的元素是“e”,则将其推回到堆栈上。否则,再次弹出堆栈。弹出顶部元素,如果弹出的元素是“e”,则将其推回到堆栈上。否则,再次弹出堆栈。弹出直到遇到e
,然后再次按下e
Student top = null;
while(!s.isEmpty() && !e.equals(top)){
top = s.pop();
}
if(e.equals(top)) {
s.push(top);
} else {
// e was not on the stack
}
弹出直到遇到
e
,然后再次按下e
Student top = null;
while(!s.isEmpty() && !e.equals(top)){
top = s.pop();
}
if(e.equals(top)) {
s.push(top);
} else {
// e was not on the stack
}
peek方法从来不会从堆栈中删除元素,但是-您总是只获得第一个元素。我想说“不使用peek”是一个骗局。为什么你不想使用peek。@Makato使用peek可以提供一个更优雅的解决方案:
while(s.peek()!=null&&!e.equals(s.peek()){s.pop();}
peek方法从不从堆栈中删除元素,不过你总是会得到第一个元素。我要说“不使用peek”是一个令人费解的问题。为什么不想使用peek。@Makato使用peek可以提供更优雅的解决方案:while(s.peek()!=null&&!e.equals(s.peek()){s.pop();}
如果堆栈s
最初为空,则会引发异常。如果e
不在堆栈上,也会引发异常,我将更正解决方案现在算法无法解决问题。请尝试将if(top!=null)
更改为if(top==e)
如果堆栈s
最初为空,则会引发异常。如果e
不在堆栈上,也会引发异常,我将更正解决方案现在算法无法解决问题。请尝试将if(top!=null)
更改为if(top==e)