package mytest;
public class LinkedList {
private int size = 0;
private Node firstNode = null;
private Node lastNode = null;
public void add(Object o){
Node newNode = new Node();
newNode.data = o;
newNode.next = null;
if(lastNode == null){
firstNode = newNode;
lastNode = newNode;
}
else{
lastNode.next = newNode;
lastNode = newNode;
}
this.size++;
}
public void add(int index , Object o){
if(index < 0 || index >= this.size){
throw new IndexOutOfBoundsException("Index: "+index+" is out of band");
}
if(index == 0){
addFirst(o);
}
else if(index == this.size-1){
addLast(o);
}
else{
Node pointer = this.firstNode;
for(int i = 0;i < index - 1;i++){
pointer = pointer.next;
}
Node newNode = new Node();
newNode.data = o;
newNode.next = pointer.next;
pointer.next = newNode;
this.size++;
}
}
public Object get(int index){
if(index < 0 || index >= this.size){
throw new IndexOutOfBoundsException("Index: "+index+" is out of band");
}
Node pointer = this.firstNode;
for(int i = 0;i < index;i++){
pointer = pointer.next;
}
return pointer.data;
}
public void remove(int index){
if(index < 0 || index >= this.size){
throw new IndexOutOfBoundsException("Index: "+index+" is out of band");
}
if(index == 0){
removeFirst();
}
else if(index == this.size-1){
removeLast();
}
else{
Node pointer = this.firstNode;
for(int i = 0;i < index - 1;i++){
pointer = pointer.next;
}
Node toBeDelete = pointer.next;
pointer.next = toBeDelete.next;
toBeDelete.next = null;
this.size--;
}
}
public int size(){
return this.size;
}
public void addFirst(Object o){
Node newNode = new Node();
newNode.data = o;
newNode.next = firstNode;
firstNode = newNode;
this.size++;
}
public void addLast(Object o){
add(o);
}
public void removeFirst(){
Node NextNode = firstNode.next;
firstNode.next = null;
firstNode = NextNode;
this.size--;
}
public void removeLast(){
Node pointer = this.firstNode;
for(int i = 0;i < this.size - 2;i++){
pointer = pointer.next;
}
Node toBeDelete = pointer.next;
pointer.next = null;
lastNode = pointer;
toBeDelete.next = null;
this.size--;
}
private static class Node{
Object data;
Node next;
}
}