public class ListRecursion { public static void main(String[] args) { List2 list = new List2(); list.display(); list.add("A"); list.display(); list.add("B"); list.display(); list.add("C"); list.display(); list.del("A"); list.display(); list.del("B"); list.display(); list.del("C"); list.display(); } } class List2 { private ListNode head; public List2() { } // Add an element to end of list: public void add(Object o) { head = add(o, head); } // Recursive add helper: private ListNode add(Object o, ListNode n) { if (n == null) return new ListNode(o, n); else { n.next = add(o, n.next); return n; } } // Remove 1st occurrence of an element from list: public void del(Object o) { head = del(o, head); } // Recursive remove helper: private ListNode del(Object o, ListNode n) { if (n == null) return n; if (o.equals(n.item)) return n.next; else { n.next=del(o,n.next); return n; } } // Return description of list: public String toString() { return head.toString(); } // Print list: public void display() { System.out.println(head); } // Using an inner class to skip getters/setters: private class ListNode { public Object item; public ListNode next; public ListNode(Object o, ListNode n) { item = o; next = n; } public String toString() { String temp = item.toString(); if (next != null) temp += " " + next.toString(); return temp; } } } /* Output: null A A B A B C B C C null */