import java.io.IOException;
public class ListIterator {
private Link current;
private Link previous;
private LinkList ourList;
public ListIterator(LinkList list) {
ourList = list;
reset();
}
// start at 'first'
public void reset() {
current = ourList.getFirst();
previous = null;
}
public boolean atEnd() {
return (current.next == null);
}
// go to next link
public void nextLink() {
previous = current;
current = current.next;
}
public Link getCurrent() {
return current;
}
public void insertAfter(long dd) {
Link newLink = new Link(dd);
if (ourList.isEmpty()) {
ourList.setFirst(newLink);
current = newLink;
} else // not empty
{
newLink.next = current.next;
current.next = newLink;
nextLink(); // point to new link
}
}
public void insertBefore(long data) {
Link newLink = new Link(data);
if (previous == null) {
newLink.next = ourList.getFirst();
ourList.setFirst(newLink);
reset();
}// not beginning
else {
newLink.next = previous.next;
previous.next = newLink;
current = newLink;
}
}
// delete item at current
public long deleteCurrent() {
long value = current.dData;
// beginning of list
if (previous == null) {
ourList.setFirst(current.next);
reset();
}// not beginning
else {
previous.next = current.next;
if (atEnd())
reset();
else
current = current.next;
}
return value;
}
public static void main(String[] args) throws IOException {
LinkList theList = new LinkList();
ListIterator iter1 = theList.getIterator();
long value;
iter1.insertAfter(20);
iter1.insertAfter(40);
iter1.insertAfter(80);
iter1.insertBefore(60);
if (!theList.isEmpty())
theList.displayList();
else
System.out.println("List is empty");
}
}
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 void displayList() {
Link current = first;
while (current != null) {
current.displayLink();
current = current.next;
}
System.out.println("");
}
}
class Link {
public long dData;
public Link next;
public Link(long dd) {
dData = dd;
}
public void displayLink() {
System.out.print(dData + " ");
}
}