package com.coding.basic; public class LinkedList implements List { private Node head; public void add(Object o){ if(head==null) { head = new Node(); head.data = o; } else { Node node = new Node(); getLastNode(head).next = node; node.data = o; } } public Node getLastNode(Node node){ if(node.next!=null) { return getLastNode(node.next); } else { return node; } } public void add(int index , Object o){ if(index==0) { addFirst(o); } else { Node node1 = getNode(index-1,head); Node node2 = getNode(1,node1); Node node = new Node(); node.data = o; node.next = node2; node1.next = node; } } public Node getNode(int index,Node node){ if(index==0) { return node; } else { return getNode(--index,node.next); } } public Object get(int index){ return getNode(index,head).data; } public Object remove(int index){ Node node1 = getNode(index-1,head); Node node2 = getNode(1,node1); Node node3 = getNode(1,node2); node1.next = node3; return node2.data; } public int size(){ int i = 0; Node node = head; while(node.next!=null) { node = node.next; i++; } return i; } public void addFirst(Object o){ Node node = new Node(); node.data =o; node.next = head; head = node; } public void addLast(Object o){ Node node = new Node(); node.data =o; getLastNode(head).next = node; } public Object removeFirst(){ Node node = head; Node node1 = getNode(1,head); head = node1; return node.data; } public Object removeLast(){ int size = size(); return remove(size -1); } public Iterator iterator(){ return null; } public String toString() { StringBuffer sb = new StringBuffer(); Node node = head; while(node.next!=null) { sb.append(node.data).append(","); node = node.next; } sb.append(node.data); return sb.toString(); } private static class Node{ Object data; Node next; } }