private void	CleanVertices()
  {
    cEdge    e;
    cVertex  v, t;
    
    /* Mark all vertices incident to some undeleted edge as on the hull. */
    e = elist.head;
    do {
      e.endpts[0].onhull = e.endpts[1].onhull = ONHULL;
      e = e.next;
    } while (e != elist.head);
    
    /* Delete all vertices that have been processed but
       are not on the hull. */
    while ( list.head != null&& list.head.mark && !list.head.onhull ) { 
      v = list.head;
      list.Delete( v );
    }
    v = list.head.next;
    do {
      if ( v.mark && !v.onhull ) {    
	t = v; 
	v = v.next;
	list.Delete( t );
      }
      else v = v.next;
    } while ( v != list.head );
    
    /* Reset flags. */
    v = list.head;
    do {
      v.duplicate = null; 
      v.onhull = !ONHULL; 
      v = v.next;
    } while ( v != list.head );
  }