package util.list; import java.util.NoSuchElementException; public class Queue extends List { private ListLink tail = null; public Queue() { } private void add(ListLink aLink) { if (tail != null) tail.setNext(aLink); tail = aLink; if (head == null) head = tail; } public void insert(Object info) { add(new ListLink(info, null)); } ListLink getTail() { return tail; } void setTail(ListLink t) { tail = t; } private ListLink findLastLink() { if (head == null) return null; ListLink curr = head; while (curr.getNext() != null) curr = curr.getNext(); return curr; } public void remove(Object info) throws NoSuchElementException { super.remove(info); if (head == null) tail = null; else if (tail.getInfo() == info) tail = findLastLink(); } public Object remove() throws NoSuchElementException { if (head == null) throw new NoSuchElementException(); Object info = head.getInfo(); head = head.getNext(); if (head == null) tail = null; return info; } public Object clone() { Queue cloneQueue = new Queue(); ListEnumeration myElements = elements(); if (myElements.hasMoreElements()) { ListLink prevLink = new ListLink(myElements.nextElement(), null); cloneQueue.add(prevLink); while (myElements.hasMoreElements()) { prevLink.setNext(new ListLink(myElements.nextElement(), null)); prevLink = prevLink.getNext(); } } return cloneQueue; } public Iterator getIterator() { return new QueueIterator(this); } }