Salve ragazzi, ho un problema,

sto risolvendo un problema che ho da svolgere in java. Ho una lista con alcuni elementi devo eliminare il primo elemento della lista e non so come fare.

Il metodo per eliminare l'elemento lo devo creare io ovviamente.

CODICE CLASSE MAIN:

codice:
public class MainDoubling {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Lista list = new ListDoubling();
		
		System.out.println("Creazione di lista 1");
		System.out.println("la lista inizialmente e' vuota: " + list.isEmpty()+ "\n");
		
		//list.insert(null, list.firstList());
		list.insert("b", list.firstList());
		list.insert("c", list.firstList());
		list.insert("d", list.firstList());
		list.insert("e", list.firstList());
		
		System.out.println("Stampo tutti gli elementi");
		Posizione p = list.firstList();
		
		while (!list.endList(p)) {
		
			System.out.println(list.readList(p));
			p = list.succ(p);			
		}
		
		System.out.println("inserisco f in seconda posizione \n");
		list.insert("f", list.succ(list.firstList()));
		
		System.out.println("Stampo tutti gli elementi");
	    	p = list.firstList();
		
		while (!list.endList(p)) {
			
			System.out.println(list.readList(p));
			p = list.succ(p);			
		}
		
		System.out.println("\n eliminazione elemento in prima posizione");
		list.remove(list.firstList());
		//punto in cui devo modificare il metodo remove dalla classe listdoubling.
		p = list.firstList();
	
		while (!list.endList(p)) {
			
			System.out.println(list.readList(p));
			p = list.succ(p);			
		}
		
		
		
		System.out.println("\n eliminazione elemento in ultima posizione");
		p = list.firstList();
		Posizione q=null;
		while (!list.endList(p)) {
			q=p;
			p = list.succ(p);			
		}
	
		list.remove(q);
		
		p = list.firstList();
	
		while (!list.endList(p)) {
			if (list.readList(p) != null)
			System.out.println(list.readList(p));
			p = list.succ(p);			
		}
		
		System.out.println("\n eliminazione elemento in posizione 3");
		q = list.succ(list.succ(list.firstList()));
		list.remove(q);
		
		p = list.firstList();
	
		while (!list.endList(p)) {
			
			System.out.println(list.readList(p));
			p = list.succ(p);			
		}
		
		
		
		
		System.out.println("Inserimento elemento fine in coda");
		list.insert("fine", p);
		
		p = list.firstList();
		
		while (!list.endList(p)) {
			
			System.out.println(list.readList(p));
			p = list.succ(p);			
		}
		
		System.out.println("\n");
		
		System.out.println("inserimento elemento in posizione 4");
		Posizione posizione4 = list.succ(list.succ(list.succ(list.firstList())));
		list.insert("posizione 4", posizione4);
		
		
		p = list.firstList();
		
		while (!list.endList(p)) {
			
			System.out.println(list.readList(p));
			p = list.succ(p);			
		}
		System.out.println("inserimento elemento posizione predecessore di 4");
		list.insert("posizione 3", list.pred(posizione4));
		
		p = list.firstList();
		
		while (!list.endList(p)) {
			
			System.out.println(list.readList(p));
			p = list.succ(p);			
		}
		
		
		System.out.println("sovrascivo elemento posizione 4");
		posizione4 = list.succ(list.succ(list.succ(list.firstList())));
		list.insert("sovrascritto", posizione4);
		
		p = list.firstList();
		
		while (!list.endList(p)) {
			
			System.out.println(list.readList(p));
			p = list.succ(p);			
		}
		
		
		
		
	}

}
CODICE CLASSE LIST DA IMPLEMENTARE

codice:
public class ListDoubling implements Lista {

	private Object[] L = new Object[1];

	private int n = 0;
	
	
	public boolean isEmpty(){return n == 0;}

	public boolean endList(Posizione p) {
	    return ((Indice) p).indice == n;
	}
  
	public Posizione firstList() {
		return new Indice();
	}

	public Posizione succ(Posizione p) {
		if (endList(p))
			throw new IndexOutOfBoundsException(((Indice) p).indice
					+ " e' ultima posizione della lista");

		Posizione pos = new Indice();
		((Indice) pos).indice = ((Indice) p).indice + 1;
		return pos;
	}

	
	protected boolean checkPosition(Posizione p) {
		   if (((Indice) p).indice < 0 || ((Indice) p).indice > n)
			  return false;
		else return true;
	}
	
	public Object readList(Posizione p) {
		if (!checkPosition(p) && !endList(p))
			throw new IndexOutOfBoundsException("posizione non valida");
		return L[((Indice) p).indice];
	}
	
	public void insert(Object e, Posizione p) {
		 if (!checkPosition(p))
				throw new IndexOutOfBoundsException("Posizione di inserimento non valida");
		 for (int i = n; i > ((Indice)p).indice; i--)
					 L[i]=L[i-1];
		 L[((Indice) p).indice] = e;
			n++;
		 if (n == L.length) {
		   Object[] temp = new Object[2 * L.length];
			for (Indice pos=(Indice) firstList(); !endList(pos); pos=(Indice) succ(pos))
		     temp[pos.indice] = L[pos.indice];
		   L = temp;
		 }
	}


	/*
	 * (non-Javadoc)
	 * @see Lista#pred(Posizione)
	 *  se p coincide con la posizione del primo elemento della lista sollevo IndexOutOfBoundsException
	 *  altrimenti restituisco la posizione antecedente a p 
	 */
	public Posizione pred(Posizione p) {
		// Da implementare
		
	}


	/*
	 * (non-Javadoc)
	 * @see Lista#remove(Posizione)
	 * Se la posizione p non è valida sollevo una IndexOutOfBoundsException
	 * altrimenti 
	 * 1. cancello l'elemento in posizione ((Indice)p).indice di L (usare shift a sinistra)
	 * 2. decremento n
	 * 3. eventualmente dimezzo L in accordo alla tecnica del raddoppiamento/dimezzamento
 	*/
	public void remove(Posizione p) {
       
		// Da implementare
		if (!checkPosition(p))
			throw new IndexOutOfBoundsException("Posizione di cancellazione non valida");	
	    L[((Indice)p).indice]
	
	}


	/*
	 * (non-Javadoc)
	 * @see Lista#writeList(java.lang.Object, Posizione)
	 * Se la posizione p non è valida sollevo una IndexOutOfBoundsException
	 * altrimenti scrivo in posizione ((Indice)p).indice di L l'elemento e
 	*/
	public void writeList(Object e, Posizione p) {
		// Da implementare
	}

	

}
Spero in un vostro aiuto grazie in anticipo come sempre