Problem 3a
     
    The idea is to go along the list, counting nodes. Once
      the node with the required count is reached, return its data.
    If the end of the list is reached before the count equals
    n, signal error.
  Solution I:
 Solution II.  Notice that the counter is treated differently!
 
      
Problem 3b
  The idea is basically the same. 
  Solution I:
 Solution II, breaking out of the llop early:
is treated differently!
  
template< class T >
T List<T>::nth( int n ){
  int i=1;   // node count
  Node<T> * ptr = first;
  // stop at n-th node, or at the end of the list
  while( ptr != NULL && i < n ){  
    ptr = ptr->next;
    i++;
  }
  // we stopped either because ptr == NULL (end of the list) or
  // because  i == n  (n-th node reached)
  // Figure out which of the two things above had happened
  if( ptr == NULL ){
    cerr << "nth: List not long enough.\n";
    exit(-1);
  }
  else 
    return ptr->data;
}
  
template< class T >
T List<T>::nth( int n ){
  int i=0;   // node count
  Node<T> * ptr = first;
  while( ptr != NULL ){  
  
    if( i==n ) 
      return ptr->data; 	  
    ptr = ptr->next;
    i++;
  }
  // we stopped because ptr == NULL (end of the list), so we know
  // we didn't reach the n-th node 
  cerr << "nth: List not long enough.\n";
  exit(-1);
}
  
template< class T >
int List<T>::find_first( const T & elt ){
  int i=0;   // node count
  Node<T> * ptr = first;
  // stop at the node whose data == elt, or at the end of the list
  while( ptr != NULL && ptr->data != elt ){  
    ptr = ptr->next;
    i++;
  }
  // we stopped either because ptr == NULL (end of the list) or
  // because  ptr->data == elt .
  // Figure out which of the two things had happened
  if( ptr == NULL )
    return -1;
  else 
    return i;
}
  
template< class T >
T List<T>::nth( int n ){
  int i=0;   // node count
  Node<T> * ptr = first;
  while( ptr != NULL ){  
  
    if( ptr->data == elt ) 
      return i;	  
    ptr = ptr->next;
    i++;
  }
  // we stopped because ptr == NULL (end of the list), so we know
  // that elt was nowhere in the list.
  return -1;
}
    
    Sergey Bratus
Last modified: Tue Jun  8 16:47:51 EDT 1999