public class List { private Entry header; private int size; // Constructor for an empty list that only contains a dummy header element public List() { header = new Entry(null,null,null); } public void addFirst( Object o ) { //to do:call the private method addBefore if (size==0){ Entry newEntry = new Entry(o,null,null); header.next = newEntry; header.previous = newEntry; newEntry.previous = newEntry; newEntry.next = newEntry; size++; } else{addBefore(o,header.next);} } public Object getFirst() { //to do return null; } public Object removeFirst() { //to do return null; } public int size() { return size; } public boolean isEmpty(){ /*boolean empty; if(size>=1) empty=true; else empty=false; return empty;*/ return size==0; } public void clear() { //to do } // Return an iterator for the list public MyListIterator iterator() { return new MyListIterator(); } // private methods private Entry addBefore( Object o, Entry e ) { //to do Entry newEntry = new Entry(o,e,e.previous); e.previous = newEntry; header.next=newEntry; size++; return null; } private void remove( Entry e ) { } // Inner class MyListIterator private class MyListIterator implements MyIterator { private Entry tempHeader = header; public boolean hasNext() { if((header.next != null) && (tempHeader != header.previous)){ return true; } else return false; } public Object next() { tempHeader = tempHeader.next;//flaw //tempHeader=header.next; return tempHeader.element; } public boolean hasPrevious() { if((header.previous != null) && (tempHeader != header.next)){ return true; } else return false; } public Object previous() { tempHeader = tempHeader.previous; return tempHeader.element; } } // End of inner class MyListIterator // Inner class Entry private class Entry { Object element;//actual data Entry next; Entry previous; Entry( Object element, Entry next, Entry previous ) { this.element = element; this.next = next; this.previous = previous; } } // End of inner class Entry } // End of class List