public class LinkedList<T> implements List<T> {
private Node head;
private Node tail;
private int size;
public void add(T o){
Node node = new Node(o);
if(head == null)
{
head = node;
}
else
{
tail.next = node;
}
tail = node;
tail.next = null;
size++;
}
public void add(int index , T o){
Node node = new Node(o);
Node temp = head;
Node tempTemp = null;
for(int i = 0; i <= index; i++)
{
temp = temp.next;
}
tempTemp = temp.next;
temp.next = node;
node.next = tempTemp;
size++;
}
public T get(int index){
Node temp = head;
for(int i = 0; i <= index; i++)
{
temp = temp.next;
}
return (T)temp.data;
}
public T remove(int index){
if(index == 0){
T o = (T) removeFirst();
return o;
}
Node temp = head;
Node tempTemp = null;
for(int i = 0; i <= index; i++)
{
temp = temp.next;
}
T o = (T) temp.next.data;
tempTemp = temp.next.next;
temp.next = null;
temp.next = tempTemp;
size--;
return o;
}
public int size(){
return size;
}
@Override
public boolean isEmpty() {
return false;
}
public void addFirst(T o){
Node node = new Node(o);
node.next = head;
head = node;
size++;
}
public void addLast(T o){
this.add(o);
}
public T removeFirst(){
T o = (T) head.data;
head = head.next;
size--;
return o;
}
public Object removeLast(){
Node temp = head;
for(int i = 0; i <= size; i++)
{
temp = temp.next;
}
temp.next = null;
T o = (T) tail.data;
tail = temp;
size--;
return o;
}
public Iterator iterator(){
return null;
}
private class Node{
T data;
Node next;
public Node(T o) {
}
}
}