一种删除堆栈中与给定堆栈中其他元素相等的元素的方法

A method to delete elements in a stack that are equal to other elements in a given stack

我想实现一种删除堆栈 this 中与作为参数给出的堆栈 s 中的元素相等的元素的方法。
我试图做点什么,但没有用。我有 s1s2 是临时堆栈,我想我正在做的是弹出 thiss 的堆栈顶部,然后比较它们检查它们是否相等,但我没有得到想要的结果。

输入:
this:-5 4个 3个 3个 1
s: 7 6个 4个 3个 1
输出:3 1

这是我的代码:

public void deleteEqualToOther(Stack s) {
        Stack s1 = new Stack();
        Stack s2 = new Stack();
        
        while(!this.isEmpty() && !s.isEmpty()) {
            if(this.stackTop() == s.stackTop()) 
                s1.push(this.stackTop());               
            this.pop();
            s2.push(s.stackTop());
            s.pop();
            
        }
        
        while(!s1.isEmpty()) {
            this.push(s1.stackTop());
            s1.pop();
            
        }
        
    }

我不确定这是否是您要的,但是.. 您可以遍历 Stack,像您一样弹出每个元素。如果该元素出现在另一个 Stack 中,则将其丢弃,否则将其添加到临时 Stack 中。完成后,您的 Stack 是空的,您的临时 Stack 包含您的 Stack 中但未出现在另一个 Stack 中的所有元素。遍历弹出元素的临时堆栈并将它们放回堆栈中。

public void deleteEqualToOther(Stack other) {
  Stack temp = new Stack();
  while (! isEmpty()) {
    int value = pop();
    if (! other.contains(value)) {
      temp.put(value);
    }
  }
  while (! temp.isEmpty()) {
    put(temp.pop());
  }
}