java - 一种递归方法和一种迭代方法的空堆栈
问题描述
这是我正在练习的旧测试中的一个问题。
在 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);
}
}
解决方案
这很简单。只需将方法的内容替换为:
while(!s.isEmpty()) {
s.pop();
}
这会在堆栈不为空时进行迭代,从堆栈中删除元素。
此外,您的问题指定使用通用Stack
方法来清空堆栈。如果是这种情况,您可能希望将方法签名更改为以下内容:
void <T> empty(Stack<T> s) {
这意味着您的空方法可以采用Stack<T>
任意泛型类型T
,而不仅仅是Stack<String>
(字符串堆栈)。
推荐阅读
- java - Eclipse 4 RCP:有没有办法通过直接工具项的处理程序显示动态菜单贡献的菜单项?
- java - 使用 forEach 方法时 JAVA 中的 NoSuchMethodError
- python - 尝试使用 grad-CAM 热图可视化 ML,但 K.gradients 返回零值
- ios - 在 SWIFT 中的 Firebase 存储中的 TableView 中显示图片而不会出错
- discord.js - SyntaxError:词法声明不能出现在单语句上下文中
- reactjs - Apollo Client:使用默认值初始化缓存的最佳实践?
- java - Java:我们如何进一步简化文件的 java 8 流逻辑
- python - 如何使用databricks集群运行气流PythonOperator?
- webrtc - WebRTC:使用 coturn 强制 iceTransportType 中继
- react-native - React Native 中的服务器端渲染