   public static void main(String[] args)
   {
      System.out.println("GenericLinkedList<String>");

      GenericLinkedList<String> stringList = new GenericLinkedList<String>();

      stringList.addFirst("A");
      stringList.addFirst("B");
      stringList.addLast("C");
      System.out.println(stringList); // B -> A -> C

      System.out.println("getFirst: " + stringList.getFirst()); // B
      System.out.println("getLast: " + stringList.getLast()); // C
      System.out.println("get(1): " + stringList.get(1)); // A

      stringList.remove("A");
      System.out.println("List after remove(\"A\")");
      System.out.println(stringList); // B -> C
      System.out.println();

      // ===========================================================
      System.out.println("GenericLinkedList<Integer>");
      GenericLinkedList<Integer> intList = new GenericLinkedList<Integer>();

      intList.addFirst(1); // ooh fancy word for this?
      intList.addFirst(2);
      intList.addLast(3);
      System.out.println(intList); // 2 -> 1 -> 3

      System.out.println("getFirst: " + intList.getFirst()); // 2
      System.out.println("getLast: " + intList.getLast()); // 3
      System.out.println("get(1): " + intList.get(1)); // 1

      intList.remove(1);
      System.out.println("List after remove(1)");

      System.out.println(intList); // 2 -> 3
   }
