import java.io.*; import java.util.ArrayList; public class Iterator implements Serializable { private StudentNode head, tail; public Iterator(StudentNode head_) { head = head_; findTail(); } private void findTail() { StudentNode cur = head; while(cur != null) { tail = cur; cur = cur.getNext(); } } private void print(double minGPA, String searchFor, boolean reverse) { if(searchFor != null) System.out.println("Search: " + searchFor); if(minGPA > 0.0) System.out.println("Dean's List"); StudentNode cur = head; if(reverse) cur = tail; while(cur != null) { if((cur.firstName().equals(searchFor) || cur.lastName().equals(searchFor) || searchFor == null) && cur.gpa() >= minGPA) System.out.println("\n" + cur.toString() + "\n"); if(reverse) cur = cur.getPrevious(); else cur = cur.getNext(); } } public void printAlphaOrder() { print(0.0, null, false); } public void printReverseAlphaOrder() { print(0.0, null, true); } public void printDeansList(double minGPA) { print(minGPA, null, false); } public void search(String searchFor) { print(0.0, searchFor, false); } public void add(StudentNode student) { if(head == null) { head = student; tail = student; return; } StudentNode cur = head; while(cur != null && cur.lastName().compareTo(student.lastName()) > 0) { cur = cur.getNext(); } if(cur == head) { head = student; head.setNext(cur); return; } if(cur == null) { tail.setNext(student); student.setPrevious(tail); return; } student.setNext(cur); student.setPrevious(cur.getPrevious()); cur.getPrevious().setNext(student); cur.setPrevious(student); findTail(); } public void removeStudent(String name) { StudentNode cur = head; while(cur != null && !cur.lastName().equals(name) && !cur.firstName().equals(name)) { cur = cur.getNext(); } if(cur == null) { System.out.println("The specified student could not be removed because the student could not be found."); return; } if(cur == head) { head = head.getNext(); } if(cur.getPrevious() != null) { cur.getPrevious().setNext(cur.getNext()); } if(cur.getNext() != null) { cur.getNext().setPrevious(cur.getPrevious()); } } public ArrayList packageNodes() { ArrayList ret = new ArrayList(); ret.add(this); StudentNode cur = head; while(cur != null) { ret.add(cur); cur = cur.getNext(); } return ret; } }