//************************ IntSLList.java ************************** // singly-linked list class to store integers public class IntSLList { private IntNode head, tail; public IntSLList() { head = tail = null; } public boolean isEmpty() { return head == null; } public void addToHead(int el) { head = new IntNode(el,head); if (tail == null) tail = head; } public void addToTail(int el) { if (!isEmpty()) { tail.next = new IntNode(el); tail = tail.next; } else head = tail = new IntNode(el); } public int deleteFromHead() { // delete the head and return its info; int el = head.info; if (head == tail) // if only one node on the list; head = tail = null; else head = head.next; return el; } public int deleteFromTail() { // delete the tail and return its info; int el = tail.info; if (head == tail) // if only one node in the list; head = tail = null; else { // if more than one node in the list, IntNode tmp; // find the predecessor of tail; for (tmp = head; tmp.next != tail; tmp = tmp.next); tail = tmp; // the predecessor of tail becomes tail; tail.next = null; } return el; } public void printAll() { for (IntNode tmp = head; tmp != null; tmp = tmp.next) System.out.print(tmp.info + " "); } public boolean isInList(int el) { IntNode tmp; for (tmp = head; tmp != null && tmp.info != el; tmp = tmp.next); return tmp != null; } public void delete(int el) { // delete the node with an element el; if (!isEmpty()) if (head == tail && el == head.info) // if only one head = tail = null; // node on the list; else if (el == head.info) // if more than one node on the list; head = head.next; // and el is in the head node; else { // if more than one node in the list IntNode pred, tmp; // and el is in a non-head node; for (pred = head, tmp = head.next; tmp != null && tmp.info != el; pred = pred.next, tmp = tmp.next); if (tmp != null) { // if el was found; pred.next = tmp.next; if (tmp == tail) // if el is in the last node; tail = pred; } } } }