class Link {
public int iData;
public Link next;
public Link previous;
public Link(int id) {
iData = id;
}
public String toString() {
return "{" + iData + "} ";
}
}
class LinkList {
private Link first;
public LinkList() {
first = null;
}
public Link getFirst() {
return first;
}
public void setFirst(Link f) {
first = f;
}
public boolean isEmpty() {
return first == null;
}
public ListIterator getIterator() {
return new ListIterator(this);
}
public String toString() {
Link current = first;
String str ="";
while (current != null) {
str += current.toString();
current = current.next;
}
return str;
}
}
class ListIterator {
private Link current;
private Link previous;
private LinkList ourList;
public ListIterator(LinkList list) {
ourList = list;
reset();
}
public void reset() {
current = ourList.getFirst();
previous = null;
}
public boolean atEnd() {
return (current.next == null);
}
public void nextLink() {
previous = current;
current = current.next;
}
public Link getCurrent() {
return current;
}
public void insertAfter(int dd) {
Link newLink = new Link(dd);
if (ourList.isEmpty()) {
ourList.setFirst(newLink);
current = newLink;
} else {
newLink.next = current.next;
current.next = newLink;
nextLink();
}
}
public void insertBefore(int dd) {
Link newLink = new Link(dd);
if (previous == null) {
newLink.next = ourList.getFirst();
ourList.setFirst(newLink);
reset();
} else {
newLink.next = previous.next;
previous.next = newLink;
current = newLink;
}
}
public double deleteCurrent() {
int value = current.iData;
if (previous == null) {
ourList.setFirst(current.next);
reset();
} else {
previous.next = current.next;
if (atEnd())
reset();
else
current = current.next;
}
return value;
}
}
public class MainClass {
public static void main(String[] args) {
LinkList theList = new LinkList();
ListIterator iter1 = theList.getIterator();
iter1.insertAfter(20);
iter1.insertAfter(40);
iter1.insertAfter(80);
iter1.insertBefore(60);
System.out.println(theList);
iter1.reset();
if (!theList.isEmpty() && !iter1.atEnd()){
iter1.nextLink();
}
System.out.println("Returned " + iter1.getCurrent().iData);
iter1.insertBefore(99);
iter1.insertAfter(100);
System.out.println(theList);
}
}
{20} {40} {60} {80}
Returned 40
{20} {99} {100} {40} {60} {80}