public interface LinkedListString{
    /**
     * appends s to the end of the LinkedListString
     */
    public void append(LinkedListString s);

    /**
     * appends c to the end of the LinkedListString.
     */
    public void append(char c);

    /**
     * deletes the i-th character in the LinkedListString.  Throws
     * IndexOutOfBoundsException if i is an invaild index.
     */
    public void delete(int i);

    /**
     * returns the index of the first (leftmost) occurance of character c
     * Returns -1 if c does not appear
     */
    public int find(char c);

    /**
     * if s is a substring of the LinkedListString, returns the index 
     * of the first character of the occurance of that substring.  
     * Otherwise returns -1.
     */
    public int indexOf(LinkedListString s);

    /**
     * returns the length of the LinkedListString
     */
    public int length();

    /**
     * returns the substring of the LinkedListString, starting at index start, 
     * and extending for length characters.  For example, calling 
     * substring(3,5) on a LinkedListString containing the characters 
     * "telephone" returns a LinkedListString containing the characters 
     * "ephon".  
     *
     * If length is less than zero, this method returns
     * either null or an empty string.  If length extends beyond the
     * end of the string, the method returns the string starting at start.
     * For example, substring(3,100) on "telephone" returns "ephone".
     */
    public LinkedListString substring(int start, int length);

    /**
     * prints the string to standard input
     */
    public void print();


    /**
     * returns the character located at the zero-based index.  Throws
     * IndexOutOfBoundsException if invalid index
     */
    public char charAt(int i);

    /**
     * return true if this and the passed LinkedListString
     * represent the same string
     */
    public boolean equals(LinkedListString lls);

}

