class LinkedList {
  class Iterator { ... }
  // and so on
  }
LinkedList.Iterator i = ...
  
class List<T> {
  Iterator find(T value) { ... } 
  Iterator firstElement() { ... } 
  Iterator LastElement() { ... } 
  Iterator next(Iterator i) { ... } 
  Iterator previous(Iterator i) { ... } 
  }
  boolean atBeginning() { ... }
  boolean atEnd() { ... }
  boolean equals(Iterator i) { ... }
  T getValue() { ... }
void drunkardsWalk(List<?> l, int steps)
  int n = l.size()
  List.Iterator here = l.begin()
  while steps-- > 0
    int m = random(2n) - n
    while m < 0 ∧ here ≠ l.begin()
      here = here.previous()
      ++m
    while m > 0 ∧ here ≠ l.end()
      here = here.next()
      --m
    f(here.value())
class list<T>
  void forEach(UnaryFunction<T> f)
    // call f on every element in the list.
UnaryFunction<String> printer = 
  new UnaryFunction<String>(System.out)
stringList.forEach(printer)
forEach()?
    
List<String> stringList = new ... for (String s: stringList) // operate on s