class Nodo {
  public String info;
  public Nodo next;
}

public class PhotoGallery {

  // rappresentazione degli oggetti
  private String url;
  private Nodo listafoto;
 
  // metodi pubblici
  public PhotoGallery(String u) {
    url = u;
    listafoto = null;
  }
  
  public int numFoto() {
    int cont = 0; 
    Nodo p = listafoto;
    while (p!=null) {
      cont++;
      p = p.next;
    }
    return cont;
  }
  
  public void aggiungi(String foto) {
    Nodo aux = new Nodo();
    aux.info = foto;
    aux.next = listafoto;
    listafoto = aux;
  }
  
  public void elimina(String foto) {
    listafoto = eliminaAux(listafoto, foto);
  }

  public boolean presente(String foto) {
    return presenteAux(listafoto, foto);
  }

  public String[] restituisciTutteLeFoto() {
    String[] ris = new String[numFoto()];
    int i = 0;
    Nodo p = listafoto;
    while (p!=null) {
      ris[i] = p.info;
      i++;
      p = p.next;
    }
    return ris;
  }

  /* oppure eseguo il ciclo sul array
  public String[] restituisciTutteLeFoto() {
    String[] ris = new String[numFoto()];
    Nodo p = listafoto;
    for(int i = 0; i < ris.length; i++) {
      ris[i] = p.info;
      p = p.next;
    }
    return ris;
  }
  */
  
  public void svuota() {
    listafoto = null;
  }

  // metodi ausiliari
  private static Nodo eliminaAux(Nodo p, String foto) {
    if (p==null) return null;
    else if (p.info.equals(foto)) return p.next;
    else {
      p.next = eliminaAux(p.next,foto);
      return p;
    }
  }
  
  private static boolean presenteAux(Nodo p, String foto) {
    if (p==null) return false;
    else if (p.info.equals(foto)) return true;
    else return presenteAux(p.next,foto);
  } 

}
