im solving some stuff for practice for my test. The question in my text book asks me to print the stuff in the circular linked list reversely. so my idea was to create a stack, move the stuff to the stack and then pop it.
Here is what i've done:
public void reversePrint() {
Stack stack = new Stack();
Node<E> temp = list;
do {
stack.push(temp);
temp = temp.getNext();
} while (temp != list);
while (!stack.empty()) {
System.out.print(stack.pop());
}
}
circularlist.java
public class CircularList<E> implements List<E> {
Node<E> list;
int size;
public CircularList() {
list = new Node(null);
list.setNext(list);
size = 0;
}
@Override
public void add(E element) {
Node<E> newNode = new Node(element);
newNode.setNext(list.getNext());
list.setNext(newNode);
size++;
}
@Override
public boolean remove(E element) {
Node<E> location = find(element);
if (location != null) {
location.setNext(location.getNext().getNext());
size--;
}
return location != null;
}
@Override
public E get(E element) {
Node<E> location = find(element);
if (location != null) {
return (E) location.getNext().getInfo();
}
return null;
}
@Override
public boolean contains(E element) {
return find(element) != null;
}
@Override
public int size() {
return size;
}
@Override
public Iterator<E> iterator() {
return new Iterator<E>() {
Node<E> tmp = list.getNext();
@Override
public boolean hasNext() {
return tmp != list;
}
@Override
public E next() {
E info = tmp.getInfo();
tmp = tmp.getNext();
return info;
}
@Override
public void remove() {
throw new UnsupportedOperationException("Not supported yet.");
}
};
}
protected Node<E> find(E element) {
Node<E> tmp = list;
while (tmp.getNext() != list && !tmp.getNext().getInfo().equals(element)) {
tmp = tmp.getNext();
}
if (tmp.getNext() == list) {
return null;
} else {
return tmp;
}
}
Node.java
public class Node<E> {
E info;
Node<E> next;
public Node(E element) {
info = element;
next = null;
}
public void setInfo(E element) {
info = element;
}
public E getInfo() {
return info;
}
public void setNext(Node<E> next) {
this.next = next;
}
public Node<E> getNext() {
return next;
}
}
My problem is i cannot use do. I need a different solution instead. Any help?