Home > DeveloperSection > Forums > Printing out a linked list using toString using java
Ankit Singh

Total Post:341

Points:2389
Posted on    October-14-2013 3:34 AM

 Java Java 
Ratings:


 1 Reply(s)
 3469  View(s)
Rate this:

 I am trying to learn how to print out a linked list. I have all the methods that I would need to use for the list, but I can't figure out how to display the values of the nodes. Right now there is nothing in my main method because I kept getting errors trying to call non static methods in the main. I have a toString method that displays the contents of the list. How would I go about calling this toString to display the value of each node? Any advice will be greatly appreciated.

Here is the node class:

public class LinkedListNode
{
    private int data;
    private LinkedListNode next;
    public LinkedListNode(int data)
    {
        this.data = data;
        this.next = null;
    }
    public int getData()
    {
        return data;
    }
    public void setData(int d)
    {
        data = d;
    }
    public LinkedListNode getNext()
    {
        return next;
    }
    public void setNext(LinkedListNode n)
    {
        next = n;
    }
}

Here is the LinkedList class that contains the main and methods to manipulate the list:

public class LinkedList {
    public LinkedListNode head;
    public static void main(String[] args) {
    LinkedList l = new LinkedList();
    l.insertFront(0);
    System.out.println(l.toString());
    }
    public LinkedList() {
        this.head = null;
    }
    public int removeFront(){
        if(head == null){
            System.out.println("Error - Attempting to call removeFront() on empty list");
            return 0;
        }else{
            int temp = head.getData();
            head = head.getNext();  
            return temp;
        }
    }
    public void insertFront(int data){
        if(head == null){
            head = new LinkedListNode(data);
        }else{
            LinkedListNode newNode = new LinkedListNode(data);
            newNode.setNext(head);
            head = newNode;
        }       
    }
    public void insertBack(int data){
        if(head == null){
            head = new LinkedListNode(data);
        }else{
            LinkedListNode newNode = new LinkedListNode(data);
            LinkedListNode current = head;
            while(current.getNext() != null){
                current = current.getNext();
            }
            current.setNext(newNode);
        }       
    }
    public int removeBack(){
        if(head == null){
            System.out.println("Error - Attempting to call removeBack() on empty list");
            return 0;
        }else if (head.getNext() == null){
            int temp = head.getData();
            head = null;
            return temp;
        }else{
            LinkedListNode current = head;
            while(current.getNext().getNext() != null){
                current = current.getNext();
            }
            int temp = current.getNext().getData();
            current.setNext(null);
            return temp;
        }       
    }
    public String toString(){
        String retStr = "Contents:\n";
        LinkedListNode current = head;
        while(current != null){
            retStr += current.getData() + "\n";
            current = current.getNext();
        }
        return retStr;
    }
    public LinkedListNode getHead() {
        return head;
    }
    public void setHead(LinkedListNode head) {
        this.head = head;
    }
}


Hank Greenberg
Hank Greenberg

Total Post:12

Points:84
Posted on    October-14-2013 3:53 AM

When the JVM tries to run your application, it calls your main method statically; something like this:

LinkedList.main();

That means there is no instance of your LinkedList class. In order to call your toString() method, you can create a new instance of your LinkedList class.

So the body of your main method should be like this:

public static void main(String[] args){
    // creating an instance of LinkedList class
    LinkedList ll = new LinkedList();
    // adding some data to the list
    ll.insertFront(1);
    ll.insertFront(2);
    ll.insertFront(3);
    ll.insertBack(4);
    System.out.println(ll.toString());
}

Don't want to miss updates? Please click the below button!

Follow MindStick