package data_Structures;
public class LinkedList implements List {
private Node head;
private int size;
LinkedList()
{
size = 0;
}
public void add(Object o){
Node newNode = new Node(o);
if(head == null)
{
head = newNode;
}
else
{
Node tempNode = head;
while(tempNode.next != null)
{
tempNode = tempNode.next;
}
tempNode.next = newNode;
}
size++;
}
public void add(int index , Object o){
Node newNode = new Node(o, getNode(index));
getNode(index-1).next = newNode;
size++;
}
public Node getNode(int index)
{
Node tempNode = head;
int i = 0;
while(i < index)
{
tempNode = tempNode.next;
i++;
}
return tempNode;
}
public Object get(int index){
return getNode(index).data;
}
public Object remove(int index){
Node tempNode = getNode(index);
getNode(index - 1).next = getNode(index+1);
tempNode.next = null;
tempNode.data = null;
size--;
return getNode(index).data;
}
public int size(){
return size;
}
public void addFirst(Object o){
Node tempNode = head;
head = new Node(o);
head.next = tempNode;
size++;
}
public void addLast(Object o){
add(o);
}
public Object removeFirst(){
Node tempNode = head;
head = getNode(1);
size--;
return tempNode.data;
}
public Object removeLast(){
getNode(size-1).next = null;
size--;
return getNode(size).data;
}
public Iterator iterator(){
return null;
}
private static class Node{
Object data;
Node next;
Node(Object data, Node next )
{
this.data = data;
this.next = next;
}
Node(Object data)
{
this.data = data;
this.next = null;
}
}
}