首页 > 解决方案 > 一种递归方法和一种迭代方法的空堆栈

问题描述

这是我正在练习的旧测试中的一个问题。

在 Java 中编写一种方法void empty(Stack s)清空一个堆栈(输入参数)。方法应该写成两个版本,一个是递归的,一个是迭代的。使用泛型类 Stack 中存在的方法void push(E element)E pop()boolean isEmpty() ,其中 E 是一个类。

因此,我尝试编写递归版本,并且在测试时似乎可以正常工作。有人对我如何启动迭代版本或改进递归版本有任何想法吗?

//recursive
void empty(Stack<String> s) {
    if (!s.isEmpty()){
        s.pop();
        empty(s);
    }
}

标签: java

解决方案


这很简单。只需将方法的内容替换为:

while(!s.isEmpty()) {
    s.pop();
}

这会在堆栈不为空时进行迭代,从堆栈中删除元素。

此外,您的问题指定使用通用Stack方法来清空堆栈。如果是这种情况,您可能希望将方法签名更改为以下内容:

void <T> empty(Stack<T> s) {

这意味着您的空方法可以采用Stack<T>任意泛型类型T,而不仅仅是Stack<String>(字符串堆栈)。


推荐阅读