// File: PhotoGallery2.java
// Time-stamp: "2003-03-20 12:18:17 calvanes"
// Scopo: PhotoGallery: soluzione domanda 1 - implementazione iterativa

class Nodo {
  public String info;
  public Nodo next;
}

public class PhotoGallery2 {

  // rappresentazione degli oggetti
  private String url;
  private Nodo listafoto;
 
  // metodi pubblici
  public PhotoGallery2(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) {
    if (!presente(foto)) {
      Nodo aux = new Nodo();
      aux.info = foto;
      aux.next = listafoto;
      listafoto = aux;
    }
  }
  
  public void elimina(String foto) {
    if (listafoto == null)   // l'elemento non e' presente e
      return;                // non devo fare nulla
    else if (listafoto.info.equals(foto)) 
      listafoto = listafoto.next; // ho eliminato il primo
    else {
      Nodo p = listafoto;
      while (p.next != null && !p.next.equals(foto))
        p = p.next;
      if (p.next.equals(foto))
        p = p.next.next;
      else      // l'elemento non e' presente
        return; // non devo fare nulla
    }
  }

  /* oppure uso un nodo generatore
  public void elimina(String foto) {
    Nodo aux = new Nodo(); // nodo generatore
    aux.next = listafoto;
    Nodo p = aux;
    while (p.next != null && !p.next.equals(foto))
      p = p.next;
    if (p.next.equals(foto))
      p = p.next.next;
    else      // l'elemento non e' presente
      return; // non devo fare nulla
  }
  */

  public boolean presente(String foto) {
    Nodo p = listafoto;
    while (p != null) {
      if (p.info.equals(foto))
        return true;
      p = p.next;
    }
    return false;
  }

  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 sull'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;
  }
}
