public class LinkedList { private Node head; private Node tail; private int size; public LinkedList() { head = tail = null; size = 0; } public void insertAtHead(Object data) { Node n = new Node(data); if(size == 0) { head = n; tail = n; } else { n.setNext(head); head = n; } size++; } public void insertAtTail(Object data) { Node n = new Node(data); if(size == 0) { head = tail = n; } else { tail.setNext(n); tail = n; } size++; } public void deleteHead() { if(size == 0) { System.err.println("No head node to delete"); return; } head = head.getNext(); size--; } public void deleteTail() { if(size == 0) { System.err.println("No tail node to delete"); return; } else if(size == 1) { head = tail = null; size--; return; } Node i = head; while(i.getNext() != tail) { i = i.getNext(); } i.setNext(null); tail = i; size--; } public void print() { Node i = head; while(i != null) { i.print(); i = i.getNext(); } } }