private ListNode getNode(int index)
	{
		// stores current node
		ListNode p;

		// throw exception if invalid index
		if(index < 0 || index > size())
			throw new IndexOutOfBoundsException("getNode index: " + index + "; size: " + theSize);

		// determine which end of this CircularLinkedList to start traversal
		if(index < theSize / 2)
		{
			// start traversal at beginning of this CircularLinkedList
			p = head.next;
			
			// traverse to specified index
			for(int i = 0; i < index; i++)
				p = p.next;            
		}
		else
		{
			// start traversal at end of this CircularLinkedList
			p = head;
			
			// traverse to specified index
			for(int i = theSize; i > index; i--)
				p = p.previous;
		}

		// return node at specified index
		return p;
	}