我想知道如何完成这个:
- 比较两个 Stack 对象
- 递归地做这个
- 在方法之后 这完成了吗,堆栈保持原样 (即相同的订单,相同的项目)。
只有 Stack
的 push
、pop
和 isEmpty
方法可用。
我寻求的更多是理论帮助而不是编码帮助,但任何见解都将不胜感激。
最佳答案
如果两个堆栈的顶层元素相同,并且其余堆栈相同(即递归条件),则两个堆栈相同。
现在,想想在从方法调用返回之前要做什么,以便让堆栈保持调用时给定的位置。
---编辑---
有效的 Java 代码(源自 Markus A. 解决方案,但有趣地使用了“finally”和泛型):
static <T> boolean compareStacks(Stack<T> a, Stack<T> b) {
if (a.isEmpty() != b.isEmpty()) return false;
if (a.isEmpty() && b.isEmpty()) return true;
T element_a = a.pop();
T element_b = b.pop();
try {
if (((element_a==null) && (element_b!=null)) || (!element_a.equals(element_b)))
return false;
return compareStacks(a, b);
} finally { // restore elements
a.push(element_a);
b.push(element_b);
}
}
关于Java 堆栈比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15230450/