Java 使用一个递归方法和一个迭代方法的空堆栈

Java 使用一个递归方法和一个迭代方法的空堆栈,java,Java,这是我正在练习的一个老测试题 在Java中编写一个方法void emptyStack s,将输入参数中的一个堆栈清空。 这个方法应该有两个版本,一个是递归的,一个是迭代的。 使用泛型类堆栈中存在的void push元素、E pop和boolean isEmpty方法,其中E是一个类 因此,我尝试编写递归版本,当我测试它时,它似乎可以工作。有人对我如何开始迭代版本或改进递归版本有什么想法吗 //recursive void empty(Stack<String> s) { if

这是我正在练习的一个老测试题

在Java中编写一个方法void emptyStack s,将输入参数中的一个堆栈清空。 这个方法应该有两个版本,一个是递归的,一个是迭代的。 使用泛型类堆栈中存在的void push元素、E pop和boolean isEmpty方法,其中E是一个类

因此,我尝试编写递归版本,当我测试它时,它似乎可以工作。有人对我如何开始迭代版本或改进递归版本有什么想法吗

//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会更好地传达这个意图:空的对我来说听起来很清楚。是的,我认为你的方式更好,我只是觉得在评论中记下它是一件有趣的事情,而不是一个答案。