Drop elements
We are chugging along nicely. Let's look at element removal:

Here comes the method definition:
scala> :paste
// Entering paste mode (ctrl-D to finish)
def drop[A](l: List[A], n: Int): List[A] =
if (n <= 0) l
else l match {
case Nil => Nil
case _ :: t => drop(t, n - 1)
}
We drop n (or less than n) elements starting at the beginning of the list. If there are less than n elements, we return a Nil (empty) list.
What is the complexity of the drop method? It is O(n), as we might end up traversing the entire list.
The dropWhile method takes a list and predicate function. It invokes the function on successive elements and drops them if it evaluates to true. It stops when the function evaluates to false:
scala> def dropWhile[A](l: List[A], f: A => Boolean): List[A] = l match {
| case x :: xs if f(x) => dropWhile(xs, f)
| case _ => l
| }
...