Referência a objetos

Olá pessoal estou com um grande problema aqui. Vocês vão ver os códigos e vão entender.

tenho o NoDaLista:

[code]package testalista;
public class NoDaLista {
int data;
NoDaLista proximo;

public NoDaLista(int data) {
    this.data = data;
    this.proximo = null;
}
public NoDaLista(int data, NoDaLista proximo) {
    this.data = data;
    this.proximo = proximo;
}

}[/code]

o Lista.java

[code]
package testalista;

public class Lista {

NoDaLista primeiro, ultimo;
String nome;

public Lista(String nome) {
    this.nome = nome;
    primeiro = ultimo = null;
}

public Lista() {
    this.nome = "Sem nome";
    primeiro = ultimo = null;
}

public boolean vazio() {
    return primeiro == null;
}

public void insereNoComeco(int num) {
    if (vazio()) {
        primeiro = ultimo = new NoDaLista(num);
    } else {
        primeiro = new NoDaLista(num, primeiro);
    }
}

public void insereNoFim(int num) {
    if (vazio()) {
        primeiro = ultimo = new NoDaLista(num);
    } else {
        ultimo = ultimo.proximo = new NoDaLista(num);
    }
}

public int removeDoComeco() {
    int volta = -100;
    if (!vazio()) {
        volta = primeiro.data;
        if (primeiro == ultimo) {
            primeiro = ultimo = null;
        } else {
            primeiro = primeiro.proximo;
        }
    }
    return volta;
}

public int removeDoFim() {
    int valor = -100;
    if (!vazio()) {
        if (primeiro == ultimo) {
            valor = ultimo.data;
            primeiro = ultimo = null;
        } else {
            NoDaLista aux = primeiro;
            while (aux.proximo != ultimo) {
                aux = aux.proximo;
            }
            valor = ultimo.data;
            aux.proximo = null;
            ultimo = aux;
        }
    }
    return valor;
}

public void imprime() {
    if (!vazio()) {
        NoDaLista aux = primeiro;
        while (aux != null) {
            System.out.println(aux.data);
            aux = aux.proximo;
        }
    }
}

public float media() {
    float media = 0;
    int i = 0;
    if (!vazio()) {
        NoDaLista cont = primeiro;
        while (cont != null) {
            media += cont.data;
            i++;
            cont = cont.proximo;
        }
    }
    media = media / i;
    return media;
}

public void seekAndDestroy(int n) {
    NoDaLista aux = primeiro;
    
    while(aux != ultimo){
        if(aux.proximo.data == n){
            aux.proximo = null;
            aux = aux.proximo.proximo;
        }
            aux = aux.proximo;
    }
    aux = primeiro;
        while (aux != null) {
            System.out.println(aux.data);
            aux = aux.proximo;
    }
    
}

public int maiorValor(){
    NoDaLista list = primeiro;
    int aux = list.data;
    while(list != null){
        if(list.data > aux){
            aux = list.data;
        }
        list = list.proximo;
    }
    return aux;
}

}[/code]

e o TestaLista.java

package testalista;

public class TestaLista {
    public static void main(String[] args) {
        Lista teste = new Lista();
        teste.insereNoComeco(30);
        teste.insereNoComeco(40);
        teste.insereNoComeco(60);
        teste.insereNoFim(80);
        teste.insereNoFim(90);
        teste.insereNoFim(100);
        teste.imprime();
        System.out.println("**********************************");
        teste.removeDoComeco();
        teste.removeDoFim();
        teste.imprime();
        System.out.println("**********************************");
        System.out.println("A media é: "+teste.media());
        System.out.println("**********************************");
//        teste.seekAndDestroy(30);
        System.out.println("O maior número é o: "+teste.maiorValor());
        System.out.println("**********************************");
        teste.seekAndDestroy(30);
    }
}

reparem no Metodo SeekAndDestroy, ele teria que achar o numero 30 e apagar a referencia, como eu vou conseguir fazer isso? esta muito dificil! Fiz todas as classes certinha só este metodo que esta me enchendo!