Invert linear linked list

Posted by ArtWorkAD on Stack Overflow See other posts from Stack Overflow or by ArtWorkAD
Published on 2011-01-13T22:22:13Z Indexed on 2011/01/13 22:53 UTC
Read the original article Hit count: 369

Hi,

a linear linked list is a set of nodes. This is how a node is defined (to keep it easy we do not distinguish between node an list):

class Node{
    Object data;
    Node link;

    public Node(Object pData, Node pLink){
        this.data = pData;
        this.link = pLink;
    }

    public String toString(){
        if(this.link != null){
            return this.data.toString() + this.link.toString();
        }else{
            return this.data.toString() ;
        }
    }

    public void inc(){
        this.data = new Integer((Integer)this.data + 1);
    }

    public void lappend(Node list){
        Node child = this.link;
        while(child != null){
            child = child.link;
        }
        child.link = list;
    }

    public Node copy(){
        if(this.link != null){
            return new Node(new Integer((Integer)this.data), this.link.copy());
        }else{
            return new Node(new Integer((Integer)this.data), null);
        }
    }

    public Node invert(){
        Node child = this.link;
        while(child != null){
            child = child.link;
        }
        child.link = this;....
    }
}

I am able to make a deep copy of the list. Now I want to invert the list so that the first node is the last and the last the first. The inverted list has to be a deep copy.

I started developing the invert function but I am not sure. Any Ideas?

Update: Maybe there is a recursive way since the linear linked list is a recursive data structure.

I would take the first element, iterate through the list until I get to a node that has no child and append the first element, I would repeat this for the second, third....

© Stack Overflow or respective owner

Related posts about java

Related posts about deep-copy