此方法应该返回当前堆栈的副本,并反转项目。
public LinkedStack<E> reversed()
{
LinkedStack<E> that= new LinkedStack<E>();
if(this.isEmpty()==true){
return this;
}
else{
while(this.isEmpty())//changed from this.isEmpty()==true
{
Node<E> snode=this.top;
that.push(snode.getData());
this.pop();
snode=snode.getLink();
/*
that.push(pop()); works perfectly
*/
}
return that;
}
}
更新
好吧,其中一个答案似乎让我更接近解决方案。它可以工作,但仅适用于在方法中创建的堆栈。我遇到的问题是将其链接到此堆栈,以便我可以返回 this
堆栈的副本。我正在使用链接堆栈。
答案 0 :(得分:3)
为什么不
while(!isEmpty()) {
revertStack.push(pop());
}
同时查看原始循环,特别是第一行,看看可能导致问题的原因
答案 1 :(得分:0)
创建了三个LinkedStack。首先复制到第二个,然后是第二个到第三个,然后是第三个到第一个
public LinkedStack<E> reversed()
{
LinkedStack<E> that= new LinkedStack<E>();
LinkedStack<E> that1= new LinkedStack<E>();
LinkedStack<E> that2= new LinkedStack<E>();
if(this.isEmpty()==true){
return this;
}
else{
while(this.isEmpty())//changed from this.isEmpty()==true
{
while(!this.isEmpty()){that.push(this.pop());}
while(!that.isEmpty()){that1.push(this.pop());}
while(!that1.isEmpty()){this.push(this.pop());}
}
return that;
}
}