Pessoal, como podem ver no meu nr. de posts, sou novo no fórum.
Na facul estavamos aprendendo Simply linked lists (não duplamente) e chegou 1 hora que o professor pede pra implementar um método com uma assinatura parecida com essa:
public int removeALL(int item);
Lembrando que nosso nodo é dividido em 2 partes (uma para dados (usamos inteiro para simplicidade)) e outra o ponteiro que aponta pro proximo nodo da lista.
Ou seja, esse método deverá remover todos os nodos contendo o elemento ‘item’ como dado no nodo, e retornar o total de nodos removidos, que continham(match “positivo”) esse valor dentro.
Bem, eu criei um método public int contains(int element); que retorna a quantidade de nodos com aquele elemento na lista.
Aqui está o código do contains: http://paste.ideaslabs.com/show/byQMo0ExnF
O máximo que consegui fazer do código do removeALL foi isto: [url]http://paste.ideaslabs.com/show/LnN8yBpEPe/url]
O que eu realmente preciso, é aprender a remover todas as ocorrências de nodos, seja no middle, ou no final da lista.
Já pensei em algo como um loop while percorrendo com aux = aux.next; mas nao tive sucesso.
Estou a dias nesse problema e nada, o professor não conseguiu ajudar, to realmente pensando em pedir ajuda pra um outro professor, pois os colegas também não quiseram/conseguiram.
Ah sim, muito importante: Eu uso uma classe só pra implementar a lista encadeada, nada de duas classes com 1 interna privada
Aqui vc consegue ter 1 boa idéia da classe:
public class ListaEncadeada {
int item, count;
ListaEncadeada head, tail, next;
public ListaEncadeada() {
head = null;
tail = null;
count = 0;
}
public void add_final(int valor) {
ListaEncadeada newnode = new ListaEncadeada();
newnode.item = valor;
if (head == null) {
head = newnode;
}
else {
tail.next = newnode;
}
tail = newnode;
count++;
}
}
Valeu