Java 堆栈比较

标签 java stack

我想知道如何完成这个:

  1. 比较两个 Stack 对象
  2. 递归地做这个
  3. 在方法之后 这完成了吗,堆栈保持原样 (即相同的订单,相同的项目)。

只有 StackpushpopisEmpty 方法可用。

我寻求的更多是理论帮助而不是编码帮助,但任何见解都将不胜感激。

最佳答案

如果两个堆栈的顶层元素相同,并且其余堆栈相同(即递归条件),则两个堆栈相同。

现在,想想在从方法调用返回之前要做什么,以便让堆栈保持调用时给定的位置。

---编辑---

有效的 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/

相关文章:

java - Picasso 加载 PHOTO_THUMBNAIL_URI 但不加载 PHOTO_URI

"inactive" View 中的 iPhone 事件触发

c - gcc 如何确定基于 C 的函数将使用的堆栈大小?

java - 在 Java 中迭代堆栈时出现错误

JavaFX NullPointerExcepion @ FXMLLoader.load(...) (URL 为空)

JavaFX-JFXpanel 错误?

java - 如何在 Spring MVC Web 应用程序中更新 session 属性

带有 "starting from"参数的 Java String.replaceFirst()

c - 尝试复制并分配此指针以使用堆栈,但它给了我一个段错误

linux - 如何动态增加进程的堆栈大小