public class RecursiveLinkedList { private Node head; public RecursiveLinkedList(){ head = null; } public void clear() { head = null; } public void add(Object item) { head = addRecursive(head, item); } private Node addRecursive(Node node, Object item) { if (node == null) { node = new Node(item, node); } else { // insert into the rest of the linked list node.setNext(addRecursive(node.getNext(), item)); } return node; } public void add(Object item, int index) { head = addRecursive(head, item, index, 0); } private Node addRecursive(Node node, Object item, int index, int currentIndex) { if (index == currentIndex) { node = new Node(item, node); } else { // insert into the rest of the linked list node.setNext(addRecursive(node.getNext(), item, index, currentIndex + 1)); } return node; } public void remove(int index){ head = removeRecursive(head, index, 0); } private Node removeRecursive(Node node, int index, int currentIndex) { if (index == currentIndex) { node = node.getNext(); } else { // remove from the rest of the linked list node.setNext(removeRecursive(node.getNext(), index, currentIndex + 1)); } return node; } public String toString(){ String res = "[ "; for (Node current = head; current != null; current=current.getNext()) res += current.getItem().toString() + " "; return res+"]"; } public static void main(String[] args) { RecursiveLinkedList list = new RecursiveLinkedList(); list.add("Jane", 0); System.out.println(list); list.add("John"); System.out.println(list); list.add("Jess"); System.out.println(list); list.add("Asa", 1); System.out.println(list); list.remove(2); System.out.println(list); list.remove(2); System.out.println(list); } }