我有一个假设的堆叠方法,可以返回 this
的反转 * 副本 *强>对象。
我需要 this
对象链接到 that
对象。感谢。
更新
澄清一下, 创建的 堆栈对象会推送从此对象中弹出的项目。 我希望此对象在此对象变空后引用该对象。我真正想要的是返回此对象的反向副本。清除?
public LinkedStack<E> reversed()
{
LinkedStack<E> that= new LinkedStack<E>();
if(this.isEmpty()){
return this;
}
else{
while(top!=null)
{
that.push(pop());
}
}
return this;
}
全班
import java.util.NoSuchElementException;
//import java.util.Stack;
public class LinkedStack<E>{
@SuppressWarnings("hiding")
public class Node<E>{
private E info;
private Node<E> link;
public Node(E info,Node<E>link){
this.info=info;
this.link=link;
}//Node constructor
public void Setinfo(E info){this.info =info;}
public E getinfo(){return info;}
public void setLink(Node<E> newLink){this.link=newLink;}
public Node<E> getLink(){return this.link;}
}//end of node
protected Node<E> upnode;
public LinkedStack(){
upnode=null;
}
//isEmpty method
public boolean isEmpty(){
if(upnode==null){
return true;
}
else
return false;
}
//item push
public void push(E item)
{
Node<E> sth=new Node<E>(item,upnode);
sth.setLink(upnode);
upnode=sth;
}
//LinkedStack push
public void push(LinkedStack<E> s)
{
if(s.isEmpty()==true)
{
throw new NoSuchElementException();
}
else{
while(!(s.isEmpty()))
{
this.push(s.pop());
}
}
}
//peek method
public E peek()
{
if(upnode==null){
throw new NoSuchElementException();
}
else
return upnode.getinfo();
}
//pop method
public E pop()
{
if(upnode==null){
throw new NoSuchElementException();
}
else{
E item=peek();
upnode=upnode.link;
return item;
}
}
public int size(){
int ct=0;
if(this.isEmpty()==true){
throw new NoSuchElementException();
}
else{
while(this.isEmpty()==false){
ct++;
upnode=upnode.getLink();
}
}
return ct;
}
//Reverse method
public LinkedStack<E> reversed()
{
LinkedStack<E> that = new LinkedStack<E>();
if(this.isEmpty()){
return this;
}
else{
while(!this.isEmpty())
{
that.push(pop());
}
}
return this;
}
//Returns a string representation of this stack
public String toString()
{
String result="";
Node<E> current=upnode;//set the current node to upnode
while(current !=null)
{//while link isn't null
result=result+(current.getinfo()).toString()+"\n";//get info and call toString
current=current.getLink();//Get the link of the current node
}
return result;//return result
}
}//end of LinkedStack
答案 0 :(得分:1)
将while(top!=null)
更改为while(!this.isEmpty())
答案 1 :(得分:0)
你的问题没有多大意义。 (你的评论也不在下面)
但是您当前的方法肯定是错误的,因为this.pop()
操作将更改状态this
。
正确的解决方案将取决于您未向我们展示的LinkedStack
类的内部详细信息。
答案 2 :(得分:0)
在修改实例时,您无需创建辅助LinkedStack
示例:
public LinkedStack<E> reversed(){
int size = size();
while(size-- > 0){ // to prevent infinite loop
push(pop());
}
return this; // this is not necesary you can make the method void.
}