Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不使用peek()从堆栈中删除元素_Java_Stack - Fatal编程技术网

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)