package com.coding.basic; public class LinkedList implements List { private Node head; private Node tail; public void add(Object o) { Node n = new Node(o); tail.next = n; tail = n; } public void add(int index , Object o) { Node n = new Node(o); getNode(index-1).next = n; n.next = getNode(index); } private Node getNode(int index) { Node n = head; int counter = 0; while (counter <index) { counter++; n = n.next; } return n; } public Object get(int index) { return getNode(index).data; } public Object remove(int index) { Object o = getNode(index).data; getNode(index-1).next = getNode(index+1); return o; } public int size() { Node n = head; int counter = 0; while (n.next != tail) { counter++; n = n.next; } counter++; return counter; } public void addFirst(Object o) { Node n = new Node(o); n.next = head; head = n; } public void addLast(Object o) { add(o); } public Object removeFirst() { Object o = head.data; head = head.next; return o; } public Object removeLast() { Object o = tail.data; Node n = head; while (n.next != tail) { n = n.next; } tail = n; return o; } public Iterator iterator() { return null; } private static class Node { Object data; Node next; public Node(Object data) { this.data = data; } } }