i have the same problem as scarface and tried a while loop but could not get it to work this is a tutorial excercise set but our lecturers have said that it may be questioned in the final exam so i want to get ahead of the game and understand how it works the *** is where the code needs to be implemented any coding to help me understand would be appreciated as my java is very bad thanks
Code:
import java.util.Iterator;
/**
* search for <i>*** to be implemented ***</i>.
*
*/
public class DLList implements Iterable {
/**
* Inner class for doubly linked list nodes.
*/
class DLNode {
Object info; // the data element
DLNode next; // the next node
DLNode prev; // the previous node
DLNode(Object argInfo) {
info = argInfo;
}
}
private DLNode head, tail;
int count;
/**
* Appends an object at the tail of this list.
* @param argOb The object to append.
*/
public void appendAtTail(Object argOb) {
// *** to be implemented ***
}
/**
* Finds the first element containing <code>obj</code> and removes it using <code>delete(DLNode)</code>.
* @param obj The object to remove.
*/
public void delete(Object obj) {
// *** to be implemented ***
}
/**
* Removes the given node maintaining the list structure.
* @param node The node to delete.
*/
private void delete(DLNode node) {
if (node.prev != null)
node.prev.next = node.next;
else {
head = node.next;
}
if (node.next != null)
node.next.prev = node.prev;
else
tail = node.prev;
if (count > 0)
count--;
}
/**
* Reverses this lists nodes (i.e. after a call to this method, the iterator
* outputs the list elements in reverse order).
*/
public void reverse() {
// *** to be implemented ***
}
/**
* Removes all multiple occurrences of elements, leaving only one occurrence
* of each unique element, using only constant memory.
*/
public void removeDuplicates() {
// *** to be implemented ***
}
/**
* Creates an iterator to traverse this list
* @return The iterator.
*/
public Iterator iterator() {
return new Iterator() {
DLNode current = DLList.this.head;
DLNode previous = null;
public boolean hasNext() {
return current != null;
}
public Object next() {
if(current == null)
return null;
Object tmp = current.info;
previous = current;
current = current.next;
return tmp;
}
public void remove() {
DLList.this.delete(previous);
}
};
}
/**
* Prints the list elements to System.out
*/
public void printList() {
Iterator iter = iterator();
while (iter.hasNext()) {
System.out.println(iter.next());
}
}
/**
* Just for testing.
*
* @param args ignored
*/
public static void main(String[] args) {
boolean manualTest = true;
{ // Test append at Tail
// set up
DLList list = new DLList();
list.appendAtTail("1");
list.appendAtTail("2");
list.appendAtTail("3");
// now test
if(manualTest)
list.printList();
Iterator iter = list.iterator();
if(iter.next().equals("1") && iter.next().equals("2") && iter.next().equals("3") && iter.hasNext() == false)
System.out.println("appendAtTail OK");
else
System.out.println("appendAtTail ERROR");
}
System.out.println();
{ // Test delete(Object)
// set up
DLList list = new DLList();
list.appendAtTail("A");
list.appendAtTail("B");
list.appendAtTail("C");
list.delete("B");
// now test
if(manualTest)
list.printList();
Iterator iter = list.iterator();
if(iter.next().equals("A") && iter.next().equals("C") && iter.hasNext() == false)
System.out.println("delete OK");
else
System.out.println("delete ERROR");
}
System.out.println();
{ // Test reverse
// set up
DLList list = new DLList();
list.appendAtTail(1);
list.appendAtTail(2);
list.appendAtTail(3);
list.reverse();
// now test
if(manualTest)
list.printList();
Iterator iter = list.iterator();
if(iter.next().equals(3) && iter.next().equals(2) && iter.next().equals(1))// && iter.hasNext() == false)
System.out.println("reverse OK");
else
System.out.println("reverse ERROR");
}
{// Test deleteDoubles
// set up
DLList list = new DLList();
list.appendAtTail(1);
list.appendAtTail(2);
list.appendAtTail(1);
list.appendAtTail(3);
list.appendAtTail(2);
list.appendAtTail(3);
list.removeDuplicates();
// now test
if(manualTest)
list.printList();
Iterator iter = list.iterator();
if(iter.next().equals(1) && iter.next().equals(2) && iter.next().equals(3) && iter.hasNext() == false)
System.out.println("deleteDoubles OK");
else
System.out.println("deleteDoubles ERROR");
}
}
}
Bookmarks