package task1.basic;
public class LinkedList implements List{
private Node head = new Node();
private int size;
private static class Node{
Object data;
Node next;
}
public void add(Object o){
addLast(o);
}
public void add(int index ,Object o){
if(index<0 || index>size -1){
throw new ArrayIndexOutOfBoundsException();
}
Node node=head;
Node newNode=new Node();
for(int i =0;i<index;i++){
node=node.next;
}
newNode.data=o;
if(index==0){
addFirst(o);
}else{
newNode.next=node.next;
node.next=newNode;
}
size++;
}
public Object get(int index){
Node node=head;
for(int i=0;i<index;i++){
node=node.next;
}
return node.data;
}
public Object remove(int index){
Node indexNode=head;
Node node=head;
for(int i=0;i<index;i++){
indexNode=indexNode.next;
}
for(int i=0;i<index-1;i++){
node=node.next;
}
node.next=indexNode.next;
indexNode.next=null;
size--;
return indexNode.data;
}
public int size(){
return size;
}
public void addFirst(Object o){
Node newNode=new Node();
newNode.data=o;
newNode.next=head;
head=newNode;
size++;
}
public void addLast(Object o){
Node newNode= new Node();
Node node= head;
for (int i=0;i<size ;i++){
node=node.next;
}
newNode.data=o;
node.next=newNode;
size++;
}
public Object removeFirst(){
head=head.next;
size--;
return head.data;
}
public Object removeLast(){
Node node=head;
for(int i=0;i<size-1 ;i++){
node=node.next;
}
Node lastNode=node.next;
node.next=null;
size--;
return lastNode.data;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}