parte a

class Lista {
	private Nodo cabeza;
	public int largo;     // Solo si es necesario

	public Lista() {
		this.cabeza = null;
		this.largo = 0;
	}

	public void poner(Nodo o, int i) {
		if (i > this.largo) 
			return;         // No se pone más allá del largo

		Nodo q = this.cabeza
		for (int n=0; n<i; n++) 
			q = q.sgte;

		o.sgte = q.sgte;
		q.sgte = o

		this.n++;
	}

	public Nodo sacar(int i) {
		if (i >= this.largo) 
			return null;    // No existe más allá del largo

		Nodo q = this.cabeza
		for (int n=0; n<i; n++) 
			q = q.sgte;

		Nodo p = q.sgte;
		q.sgte = p.sgte;
		this.n--;

		return p;
	}
}


parte b

class Pila {
	private Lista pila;

	public Pila() {          // Ya no es necesario ponerle tope.
		pila = new Lista();
	}

	public void poner(Object o) {
		Nodo p = new Nodo(o);
		pila.poner(Nodo, pila.largo);
	}

	public Object sacar() {
		Nodo p = pila.sacar(pila.largo-1);
		return p.info;
	}
}
