import java.util.Iterator;
import java.util.NoSuchElementException;
/** 
    MonBrin code un brin d'ADN sous forme de liste simplement chaînée.

    Plusieurs instances de MonMaillon reliées convenablement forment une structure de liste simplement chaînée contenant pour chaque maillon le nom de la base.

    On n'utilise pas java.util et on recode tout.

    Cette version a un problème : la navigation n'est pas raisonnable
*/
public class MonBrin implements Iterator<Base>{

    public MonMaillon debut;
    public MonMaillon index;
    //Le constructeur fabrique un brin à partir du premier maillon p;
    public MonBrin(MonMaillon p){
        this.debut = p;
        this.index = p;
    }

    public MonMaillon getDebut(){
        return this.debut;
    }

    public MonMaillon getIndex(){
        return this.index;
    }    

    // rappel : on met @Override pour dire au compilateur qu'on veut surcharger (en particulier c'est le cas quand on implémente une interface)
    // ce n'est pas nécessaire dans ce cas mais ça permet d'avoir des messages d'alerte si on se trompe (typo dans le nom de la méthode ...)
    // voir https://stackoverflow.com/questions/94361/when-do-you-use-javas-override-annotation-and-why
    @Override
    public boolean hasNext(){
        if (this.index.suivant==null){
            return false;
        }
        else{
            return true;
        }
    }

    @Override
    public Base next() {
        if (this.hasNext()){
            this.index = this.index.suivant;
            return this.index.b;
        }
        else{
            throw new NoSuchElementException();
        }

    }

}




