import java.util.Iterator; public class ListTable implements Table, Iterable { private Node head = null; public int nodecount = 0; public long getitcount = 0; public void put(K key, V value) { Node n = new Node(key, value, head); head=n; nodecount++; } public V get(K key) { for (Node n = head; n != null; n = n.next) { getitcount++; if (key.equals(n.key)) return n.value; } return null; } public void remove(K key) { if (head!=null) { if (key.equals(head.key)) { head = head.next; } for (Node n = head; n!=null && n.next != null; n = n.next) { if (key.equals(n.next.key)) { n.next = n.next.next; } } } } public Iterator iterator() { return new LTI(head); } private class Node { private K key; private V value; private Node next; Node(K k, V v, Node l) { key = k; value = v; next = l; } } private class LTI implements Iterator { private Node c; LTI(Node head) { c=head; } public boolean hasNext() { return c!=null; } public K next() { K k=c.key; c = c.next; return k; } public void remove() { throw new UnsupportedOperationException(); } } }