If you look at the API documentation for Iterator and ListIterator, you'll see that ListIterator extends Iterator. So a ListIterator is an Iterator with some extra things added which are specifically for iterating lists, such as the ability to iterate in two directions (from the head to the tail, or from the tail to the head of the list).
Note that a List is an ordered collections, while other collections, for example Set, are not ordered. You can regard a List as a sequence of things, one after the other, and a Set as a bag of things which are not ordered in any way. Because of this, it makes sense for a List to be iterated in two directions, but not for a Set.
About your second question, you can find an answer here:
What is a fail-fast iterator?