I recently implemented Linked List on my own. I did not use generics as I am still learning. How can I improve it:
package datastructures;
class LinkedList
{
Node head = null;
Node tail = null;
int size = 0;
public void add(int data)
{
Node n = new Node();
n.setElement(data);
if(head == null){head = n; tail = n;}
else
{
tail.setNext(n);
tail = n;
}
size++;
}
public void size()
{
System.out.println("Size of the list is " + size);
}
public void addFront(int data)
{
Node n = new Node();
n.setElement(data);
if(head == null) { head = n; tail = n; }
else
{
n.setNext(head);
head = n;
}
size++;
}
public void addLast(int data)
{
Node n = new Node();
n.setElement(data);
if(head == null){head = n; tail = n;}
else
{
tail.setNext(n);
tail = n;
}
size++;
}
public void removeFirst()
{
if(size==0){return ;}
else
{
Node n = head.getNext();
head = n;
}
size--;
}
public void removeLast()
{
if(size==0){return ;}
else
{
Node tmp , prev = null;
tmp = head;
while(tmp != null)
{
if(tmp.getNext() == tail){prev = tmp;}
tmp = tmp.getNext();
}
tail = prev;
tail.setNext(null);
}
size--;
}
public void printList()
{
Node cNode = head;
while(cNode != null)
{
System.out.println(cNode.getElement()+" ");
cNode = cNode.getNext();
}
System.out.println("");
}
public static void main(String args[])
{
LinkedList l = new LinkedList();
l.add(1);
l.add(2);
l.add(3);
l.add(4);
l.add(5);
l.add(6);
l.add(7);
l.add(8);
l.addLast(9);
l.addFront(0);
l.printList();
System.out.println("Head Node is "+l.head.getElement());
System.out.println("Tail Node is "+l.tail.getElement());
l.size();
System.out.println("\\\\\\\\\\\\\\\\Before removing the first element////////");
System.out.println("");
System.out.println("\\\\\\\\\\\\\\\\After removing the first element and removing the last element////////");
System.out.println("");
l.removeFirst();
l.removeLast();
l.printList();
System.out.println("Head Node is "+l.head.getElement());
System.out.println("Tail Node is "+l.tail.getElement());
l.size();
}
}
class Node
{
int data;
Node next;
public void setElement(int data)
{
this.data = data;
}
public int getElement()
{
return data;
}
public Node getNext()
{
return next;
}
public void setNext(Node n)
{
this.next = n;
}
}