在java中返回对象堆栈的副本

时间:2013-10-07 01:27:18

标签: java list linked-list stack reverse

我有一个假设的堆叠方法,可以返回 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

3 个答案:

答案 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.
}