Why am I getting this error message My BinarySearchTree clas
Why am I getting this error message?
My BinarySearchTree class works so I know the problem is with the SortedListLinked class. The SortedListLinked code is below.
////////////////////////////////////////////////////////////////////////////
public class SortedListLinked
{
private Node head;
private int size;
public SortedListLinked()
{
head = null;
size = 0;
}
public boolean isEmpty()
{
return (size == 0);
}
public int size()
{
return size;
}
public KeyedItem remove()
{
//DO THIS
//remove the smallest item
if(head == null) return null;
KeyedItem itm = (KeyedItem)head.getItem();
head = head.getNext();
size--;
return itm;
}
private Node locateNodeAdd(KeyedItem item)
{
//DO THIS
//find the insertion location (remember FIFO for duplicates)
Node curr = head;
Node prev = null;
String itm1 = item.getKey();
KeyedItem k = (KeyedItem) curr.getItem();
String itm2 = k.getKey();
//keep looking until the it find the correct insertion spot
while(curr != null && (itm2.compareTo(itm1)) >= 0)
{
prev = curr;
curr = curr.getNext();
k = (KeyedItem) curr.getItem();
itm2 = k.getKey();
}
return prev;
}
public void add(KeyedItem item)
{
Node prev = locateNodeAdd(item);
if (prev == null)
{
//insert the new node containing the new item at the beginning of the list
Node node = new Node(item);
node.setNext(head);
head = node;
}
else
{
//insert the new node containing the new item after the node that prev references
Node node = new Node(item);
node.setNext(prev.getNext());
prev.setNext(node);
}
size++;
}
}
Solution
Hopefully this should do the trick. I added some code along with comments for you. If it didn\'t work, please post the whole code, so that we can compile and check with the errors.
public class SortedListLinked
{
private Node head;
private int size;
public SortedListLinked()
{
head = null;
size = 0;
}
public boolean isEmpty()
{
return (size == 0);
}
public int size()
{
return size;
}
public KeyedItem remove()
{
//DO THIS
//remove the smallest item
if(head == null) return null;
KeyedItem itm = (KeyedItem)head.getItem();
head = head.getNext();
size--;
return itm;
}
private Node locateNodeAdd(KeyedItem item)
{
//DO THIS
//find the insertion location (remember FIFO for duplicates)
//The problem here is you\'re not handling an empty list.
//What if the list is empty, and you\'re trying to insert the first item.
//So, lets add an extreme case:
if(head == null) //If there are no nodes in the list.
return head; //Insert at the head of the list.
Node curr = head; //If not, make head the current node.
Node prev = null; //Make previous null.
String itm1 = item.getKey(); //Get the key value of item.
KeyedItem k = (KeyedItem) curr.getItem(); //Get the node of head node.
String itm2 = k.getKey(); //Get the key value of head.
//keep looking until the it find the correct insertion spot
//This loop uses the follower to move further.
while(curr != null && (itm2.compareTo(itm1)) >= 0)
//Till there are nodes to move further, and the value of that node is greater than item value.
{
prev = curr; //Make current node previous.
curr = curr.getNext(); //Make next node current.
k = (KeyedItem) curr.getItem(); //Get the node of current node.
itm2 = k.getKey(); //Get the key of current node.
}
return prev; //Returns the previous node value.
}
public void add(KeyedItem item)
{
Node prev = locateNodeAdd(item);
if (prev == null) //If you should insert at a null position, i.e., when there are no nodes in the list.
{
//insert the new node containing the new item at the beginning of the list
Node node = new Node(item); //Create a node with the specified item.
node.setNext(head); //Make this newly created node->next point to null.
head = node; //Make head point to this node.
}
else
{
//insert the new node containing the new item after the node that prev references
Node node = new Node(item); //Create a node with the specified item.
node.setNext(prev.getNext()); //Make this newly created node->next point to what prev->next is pointing to.
prev.setNext(node); //Make the prev->next now point to this node.
}
size++; //Increase the size.
}
}


