import java.util.*;

public class IterTest {
    public static void main(String args[]) {
	LinkedList<Integer> list = new LinkedList<Integer>();

	list.add(1);
	list.add(2);
	list.add(3);
	list.add(4);
	list.add(5);
	System.out.println(list);

	ListIterator<Integer> it = list.listIterator();
	System.out.println(it.next());
	System.out.println(it.next());
	System.out.println(it.next());
	ListIterator<Integer> it2 = it;
	System.out.println(it.next());
	System.out.println(it.next());
	// it and it2 are reference copies
	System.out.println(it2.previous());
	System.out.println(it2.previous());

	// reset iterator to front of list
	it = list.listIterator();

	// insert 6 between two and three
	it.next();
	it.next();
	it.add(6);
	System.out.println(list);

	// insert 12 between 3 and 4 using the same iterator
	it.next();
	it.add(12);
	System.out.println(list);

	// insert 20 between 4 and 5 using the same iterator
	// FILL IN HERE
	System.out.println(list);

	// insert 7 before 6 using the same iterator
	// FILL IN HERE
	System.out.println(list);

	// remove the 2 using the same iterator
	// FILL IN HERE
	System.out.println(list);

	// traverse list, removing elements > 9
	it = list.listIterator();
	while (it.hasNext()) {
	    if (it.next() > 9) {
		it.remove();
	    }
	}
	System.out.println(list);

	// traverse list backwards, removing elements <= 3
	// FILL IN HERE
	System.out.println(list);

	// traverse list, adding a 0 after every even element
	// FILL IN HERE
	System.out.println(list);

	// traverse list, pulling out the maximum element
	// hint:  remove the first element,and traverse the list.
	// when you find a larger element, remove it and put the
	// former largest back -- you don't need to preserve the 
	// original order.
	// FILL IN HERE
    }
}
