package com.coding.basic;
public class LinkedList implements List {
private Node head;
public void add(Object o){
Node node = new Node(o, null);
if (head == null){
head = node;
}else {
Node current = head;
while (current.getNext() != null) {
current = current.getNext();
}
current.setNext(node);
}
}
public void add(int index , Object o){
Node current = head;
for (int i = 0; i < index-1; i++) {
current = current.getNext();
if (current == null){
throw new IndexOutOfBoundsException();
}
}
Node right = current.getNext();
current.setNext(new Node(o,right));
}
public Object get(int index){
if (head == null){
return null;
}
Node current = head;
for (int i = 0; i < index; i++) {
current = current.getNext();
if (current == null){
throw new IndexOutOfBoundsException();
}
}
return current.getData();
}
public Object remove(int index){
Node current = head;
for (int i = 0; i < index - 1; i++) {
current = current.getNext();
if (current == null){
throw new IndexOutOfBoundsException();
}
}
if (current.getNext() == null){
throw new IndexOutOfBoundsException();
}
Object removed = current.getNext().getData();
current.setNext(current.getNext().getNext());
return removed;
}
public int size(){
if (head == null){
return 0;
}
int n = 1;
Node current = head;
while (current.getNext() != null) {
n ++;
current = current.getNext();
}
return n;
}
public void addFirst(Object o){
}
public void addLast(Object o){
}
public Object removeFirst(){
return null;
}
public Object removeLast(){
return null;
}
public Iterator iterator(){
return null;
}
private static class Node{
Object data;
Node next;
public Node(Object data, Node next) {
this.data = data;
this.next = next;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}
}