java - 删除堆栈中的特定元素

标签 java stack

我正在尝试删除堆栈中的特定元素,但遇到了一些麻烦。我的想法是将元素弹出到临时堆栈中,弹出我正在查找的索引,然后将临时堆栈中的元素弹出回主堆栈。我无法想出如何让临时堆栈回到顶部。任何帮助将不胜感激。

public E remove(int index) {
    Stack<E> tmpStack = new Stack<E>();
    if (size() == 0) {
        return null;
    } else {
        for (int i = 0; i < index; i++) {
            tmpStack.push(this.pop());
        }
        return tmpStack.pop();
    }
    while (!tmpStack.isEmpty())
        this.push(tmpStack.pop());
}

想法?干杯!

最佳答案

问题是您在最后一个恢复操作之前有一个返回,因此方法返回已删除的元素,而无需在其后调用代码。

您通常会有 unreachable code错误,但在您的情况下,这不是真的,因为您没有将最后一个 while 包含在 else 分支内,因此如果堆栈为空,则 while 是执行(即使在空堆栈上)并且 java 编译器无法检测到这一点。

你应该做类似的事情:

if (isEmpty())
  return null;
else
{
  for (int i = 0; i < index; i++)
    tmpStack.push(this.pop());

  E removedElement = tmpStack.pop();

  while (!tmpStack.isEmpty())
    this.push(tmpStack.pop());

  return removedElement;
}

关于java - 删除堆栈中的特定元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19647713/

相关文章:

java - 如何退出rmi服务器应用程序

java - 导航栏按钮在从服务绘制的布局上没有响应

java - ab apache 基准测试中的传输率

java - 如何获取接口(interface)<T>的返回类型?

c++ - 为什么这段代码在测试堆栈时会崩溃?

javascript - 扫雷游戏 - 超出最大调用堆栈边

C 类型堆栈 : Linked-List Implementation

Java 显示不正确的当前年份

java - 从另一个方法调用引发异常的方法时,如何避免获得 "Missing return statement"?

C : assign value to uninitialzed struct and union