删除堆栈中的特定元素

时间:2013-10-29 00:45:29

标签: 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());
}

思考?干杯!

2 个答案:

答案 0 :(得分:3)

问题是你在最后一次恢复操作之前有一个返回,所以方法返回带有被移除的元素而不调用它之后的代码。

你通常会遇到unreachable code错误,但在你的情况下这不是真的,因为你没有在while分支中包含最后else,所以如果堆栈是空的while 1}}被执行(即使在空堆栈上),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;
}

答案 1 :(得分:1)

访问堆栈中特定索引处的元素与堆栈有关。 其他考虑因素包括索引是否从堆栈的最顶部引用。 正如其他人所提到的,问题是你在将元素放回原始堆栈之前返回。 您还应该考虑索引大于堆栈当前大小的情况,因为当前实现将导致错误。 (Java Stack将抛出EmptyStackException