Java 使用一个递归方法和一个迭代方法的空堆栈
这是我正在练习的一个老测试题 在Java中编写一个方法void emptyStack s,将输入参数中的一个堆栈清空。 这个方法应该有两个版本,一个是递归的,一个是迭代的。 使用泛型类堆栈中存在的void push元素、E pop和boolean isEmpty方法,其中E是一个类 因此,我尝试编写递归版本,当我测试它时,它似乎可以工作。有人对我如何开始迭代版本或改进递归版本有什么想法吗Java 使用一个递归方法和一个迭代方法的空堆栈,java,Java,这是我正在练习的一个老测试题 在Java中编写一个方法void emptyStack s,将输入参数中的一个堆栈清空。 这个方法应该有两个版本,一个是递归的,一个是迭代的。 使用泛型类堆栈中存在的void push元素、E pop和boolean isEmpty方法,其中E是一个类 因此,我尝试编写递归版本,当我测试它时,它似乎可以工作。有人对我如何开始迭代版本或改进递归版本有什么想法吗 //recursive void empty(Stack<String> s) { if
//recursive
void empty(Stack<String> s) {
if (!s.isEmpty()){
s.pop();
empty(s);
}
}
这很简单。只需将方法的内容替换为:
while(!s.isEmpty()) {
s.pop();
}
当堆栈不为空时,将进行迭代,从堆栈中删除元素
此外,您的问题指定使用通用堆栈方法清空堆栈。如果是这种情况,您可能希望将方法签名更改为以下内容:
void <T> empty(Stack<T> s) {
这意味着您的空方法可以采用任意泛型类型T的堆栈,而不仅仅是字符串的堆栈。使用循环代替迭代?迭代版本的开始:您认为是什么?听起来像是一个应该发布在Ok上的问题,所以使用iterative时,他们指的是for-,while循环?@DanielAndersson是的,这是迭代的,它在一些同样可以使用的东西上重复操作!s、 空保存两封信!没什么大不了的,但是Stack已经复制了很多方法了。@Nexevis我相信isEmpty会更好地传达这个意图:空的对我来说听起来很清楚。是的,我认为你的方式更好,我只是觉得在评论中记下它是一件有趣的事情,而不是一个答案。