To complete the task, you need to fill in the missing code. I’ve included code to create an Iterator. An Iterator is an object that iterates over another object – in this case, a circular linked list. You can use the .next() method to advance the Iterator to the next item (the first time you call it, the iterator will travel to node at index 0). Using iterator’s .remove() removes the node the iterator is currently at. Say that we had a CircularLinkedList that looked like this: A ==> B ==> C ==> D ==> E ==> Calling .next() three times will advance the iterator to index 2. Calling .remove() once will remove the node at index 2. A ==> B ==> D ==> E ==> Calling .remove() once more will remove the node now at index 2. A ==> B ==> E ==> The Iterator methods handle wrapping around the CircularLinkedList. Be sure to create the iterator using l.iterator() and after you’ve added all the nodes to the list, where l is your CircularLinkedList Solution import java.util.Iterator; class CircularLinkedList implements Iterable { // Your variables // You can include a reference to a tail if you want Node head; int size; // BE SURE TO KEEP TRACK OF THE SIZE // implement this constructor public CircularLinkedList() { head=null; } // writing helper functions for add and remove, like the book did can help // but remember, the last element\'s next node will be the head! // attach a node to the end of the list // Be sure to handle the adding to an empty list // always returns true public boolean add(E e) { Node newNode=new Node(e); if(size==0){ head=newNode; } else{ Node last=getNode(size-1); last.next=newNode; } newNode.next=head; //last element node is set to head size++; return true; } // need to handle // out of bounds // empty list // adding to front // adding to middle // adding to \"end\" // REMEMBER TO INCREMENT THE SIZE public boolean add(int index, E e){ if(index>size) return false; Node tmp=new Node(e); if(index==0){ tmp.next=head; Node last=getNode(size-1); head=tmp; last.next=head; } else { Node curr=getNode(index-1); tmp.next=curr.next; curr.next=tmp; } size++; return true; } // I highly recommend using this helper method // Return Node found at the specified index // be sure to handle out of bounds cases private Node getNode(int index ) { Node prev=head; for(int i=0;isize) { e=null; } else if(index==0){ e = head.getElement(); Node last=getNode(size-1); head=head.next; last.next=head; size--; } else{ Node prev=getNode(index-1); Node curr=getNode(index); e=curr.getElement(); prev.next=curr.next; size--; } return e; } // Turns your list into a string // Useful for debugging public String toString(){ Node current = head; StringBuilder result = new StringBuilder(); if(size == 0){ return \"\"; } if(size == 1) { return head.getElement().toString(); } else{ do{ result.append(current.getElement()); result.append(\" ==> \"); current = current.next; } while(current != head); } return result.toString(); } public Iterator iterator() { return new ListIterator(); } /.