public class PileChainee<E> implements Pile<E> {

	protected E valeur;
	protected PileChainee<E> suivant;

	public PileChainee() {
		this.valeur = null;
		this.suivant = null;
	}

	public PileChainee(E element) {
		this.valeur = element;
		this.suivant = null;
	}

	@Override
	public void addFirst(E element) {
		if (this.isEmpty()) {
			this.valeur = element;
		} else {
			PileChainee<E> nouveau = new PileChainee<>();
			nouveau.valeur = this.valeur;
			nouveau.suivant = this.suivant;
			this.valeur = element;
			this.suivant = nouveau;
		}
	}

	@Override
	public E removeFirst() {
		if (this.isEmpty()) {
			throw new IllegalStateException("Pile vide");
		} else {
			if (this.suivant == null) {
				E temp = this.valeur;
				this.valeur = null;
				return temp;
			} else {
				E temp = this.valeur;
				this.valeur = this.suivant.valeur;
				this.suivant = this.suivant.suivant;
				return temp;
			}
		}
	}

	@Override
	public boolean isEmpty() {
		return (this.valeur == null);
	}

}