You might want to check out these before continuing:
https://linuxjunkies.wordpress.com/2010/11/18/data-structures-using-java-part-6-linked-lists-part-1/

ListNode Class
public class ListNode {
Object data;
ListNode nextNode;
ListNode (Object object, ListNode node){
data = object;
nextNode = node;
}
ListNode (Object object){
this(object,null);
}
Object getObject(){
return data;
}
ListNode getNext(){
return nextNode;
}
}
List Class
public class List {
private ListNode firstNode;
private ListNode lastNode;
private String name;
public List(){
this("list");
}
public List(String listname){
name = listname;
firstNode = lastNode = null;
}
public void insertAtFront(Object item){
if (isEmpty())
firstNode = lastNode = new ListNode(item);
else
firstNode = new ListNode(item, firstNode);
}
public void insertAtBack(Object item){
if (isEmpty())
firstNode = lastNode = new ListNode(item);
else
lastNode = lastNode.nextNode = new ListNode(item);
}
public Object removeFromFront() throws EmptyListException{
if (isEmpty())
throw new EmptyListException(name);
Object removed = firstNode.data;
if( firstNode == lastNode)
firstNode = lastNode = null;
else
firstNode = firstNode.nextNode;
return removed;
}
public Object removeFromBack() throws EmptyListException{
if (isEmpty())
throw new EmptyListException(name);
Object removed = lastNode.data;
if( firstNode == lastNode)
firstNode = lastNode = null;
else{
ListNode current = firstNode;
while(current.nextNode != lastNode)
current = current.nextNode;
lastNode = current;
current.nextNode = null;
}
return removed;
}
public boolean isEmpty(){
return firstNode == null;
}
public void print(){
if (isEmpty()){
System.out.println("List is empty");
return;
}
ListNode current = firstNode;
while (current != null){
System.out.printf("%s --> ", current.data);
current = current.nextNode;
}
System.out.println();
}
public int length(){
int length = 0;
if (isEmpty()){
return 0;
}
ListNode current = firstNode;
while (current != null){
current = current.nextNode;
length++;
}
return length;
}
public int recursiveSize(){
return recursiveLength(firstNode);
}
public int recursiveLength(ListNode current){
if (isEmpty()){
return 0;
}
if (current == null)
return 0;
return (1 + recursiveLength(current.nextNode));
}
}
ListTest Class
public class ListTest {
public static void main(String[] args){
List list = new List();
list.insertAtFront( "four" );
list.print();
list.insertAtFront( "two" );
list.print();
list.insertAtBack( "six" );
list.print();
list.insertAtBack( "nine" );
list.print();
System.out.printf("Length: %d%n", list.recursiveSize());
System.out.printf("Length: %d%n", list.length());
try{
System.out.printf( "%s removed\n", list.removeFromFront());
list.print();
System.out.printf( "%s removed\n", list.removeFromFront());
list.print();
System.out.printf( "%s removed\n", list.removeFromBack());
list.print();
System.out.printf( "%s removed\n", list.removeFromBack());
list.print();
}catch ( EmptyListException e ){
e.printStackTrace();
}
System.out.printf("Length: %d%n", list.recursiveSize());
System.out.printf("Length: %d%n", list.length());
}
}
This is what you get
four --> two --> four --> two --> four --> six --> two --> four --> six --> nine --> Length: 4 Length: 4 two removed four --> six --> nine --> four removed six --> nine --> nine removed six --> six removed List is empty Length: 0 Length: 0







