/**
  * Deletes a point from a given index.
  *
  * @param index the index
  * @return true, if successful
  */
 public boolean deleteIndex(int index) {
   if (index == 0) {
     if (size == 1) {
       clearList();
       return true;
     }
     start = start.getNext();
     start.setPrev(end);
     end.setNext(start);
     size--;
     return true;
   }
   if (index == (size - 1)) {
     end = end.getPrev();
     end.setNext(start);
     start.setPrev(end);
     size--;
     return true;
   }
   PointElement pointer = start.getNext();
   for (int i = 1; i < size; i++) {
     if (i == index) {
       PointElement previousElement = pointer.getPrev();
       PointElement nextElement = pointer.getNext();
       previousElement.setNext(nextElement);
       nextElement.setPrev(previousElement);
       size--;
       return true;
     }
     pointer = pointer.getNext();
   }
   return false;
 }
 /**
  * Insert point at the end of the list.
  *
  * @param point the point
  */
 public void insertEnd(Point point) {
   PointElement newElement = new PointElement(point, null, null);
   if (start == null) {
     startNotInitialized(newElement);
   } else {
     newElement.setPrev(end);
     end.setNext(newElement);
     start.setPrev(newElement);
     newElement.setNext(start);
     end = newElement;
   }
   size++;
 }
 /**
  * Insert a point at a given index.
  *
  * @param point the point
  * @param index the index
  */
 public void insertIndex(Point point, int index) {
   PointElement newElement = new PointElement(point, null, null);
   if (index == 0) {
     insertStart(point);
     return;
   }
   PointElement pointer = start;
   for (int i = 1; i <= size; i++) {
     if (i == index) {
       PointElement nextElement = pointer.getNext();
       pointer.setNext(newElement);
       newElement.setPrev(pointer);
       newElement.setNext(nextElement);
       nextElement.setPrev(newElement);
     }
     pointer = pointer.getNext();
   }
   size++;
 }
 /**
  * This method is a help method and is invoked when the list is still empty.
  *
  * @param newElement the new element
  */
 private void startNotInitialized(PointElement newElement) {
   newElement.setNext(newElement);
   newElement.setPrev(newElement);
   start = newElement;
   end = start;
 }