public void add(String str)
  {
    Node current = this.HEAD;
    Node[] update = new Node[MAX_LEVEL + 1];

    for (int i = this.level; i >= 0; i--)
      {
        while (current.pointer[i] != null
               && current.pointer[i].val.compareTo(str) < 0)
          {
            current = current.pointer[i];
          }// while
        update[i] = current;
      } // for

    current = current.pointer[0];

    if (current == null || !current.val.equals(str))
      {
        int lvl = level();
        if (lvl > this.level)
          {
            for (int i = this.level + 1; i <= lvl; i++)
              {
                update[i] = this.HEAD;
              }// for
            this.level = lvl;
          }// if
        current = new Node(str, lvl);
        for (int i = 0; i <= lvl; i++)
          {
            current.pointer[i] = update[i].pointer[i];
            update[i].pointer[i] = current;
          }// for
      } // if
  }// add(String str)