@Override
  public void remove(String str)
  {
    skipListNode s = head;
    skipListNode[] newSkip = new skipListNode[maxLevel + 1];

    for (int i = level; i >= 0; i--)
      {
        while (s.next[i] != null && s.next[i].data.compareTo(str) < 0)
          {
            s = s.next[i];
          } // while
        newSkip[i] = s;
      } // for(i)
    s = s.next[0];

    if (s.data.equals(str)) // if the node is found
      {
        for (int i = 0; i <= level; i++)
          {
            if (newSkip[i].next[i] != s)
              break;
            newSkip[i].next[i] = s.next[i];
          } // for(i)
        while (level > 0 && this.head.next[level] == null)
          {
            level--; // decrease the level
          } // while
      } // if
  } // remove(String)