Olá galera estou apredendo estrutura da dados estou verificando uma classe lista mas a única coisa que eu não entendi foi o método remover alguém pode me explicar…é muito complexo…todos os outros eu entendi de menos o método remover vo deixar a classe ai quem souber por favor me explique…!
/* CLASSE: LISTA ENCADEADA
* inserir(x) -> insere o elemento na lista
* pesquisar(x) -> procura pela chave na lista, retorna o nodo se o elemento for encontrado e NULL caso contrário
* remover(x) -> remove um nodo das lista de acordo com a chave
* imprimir(x) -> imprime todos os nodos da lista
*/
public class Lista
{
private NodoLista prim = null;
private NodoLista ult = null;
public void inserir(int chave)
{
NodoLista aux = new NodoLista();
aux.chave = chave; // preenche o nodo com os dados
if(prim == null) // lista VAZIA
prim = aux; // atualiza o primeiro
else
ult.prox = aux;
ult = aux; // atualiza o ultimo
}
public NodoLista pesquisar(int chave)
{
NodoLista temp;
temp = prim;
while(temp != null)
{
if(temp.chave == chave) // registro encontrado
break; // abandona o while
temp = temp.prox; // avança para o próximo nodo
}
return temp; // retorna o nodo ou null se não encontrado
}
public void remover(int chave)//esse método que eu não entendi
{
NodoLista aux, ant;
aux = prim;
ant = null;
while(aux != null)
{
if(aux.chave == chave) // nodo encontrado
{
if(aux == prim) // se o nodo a ser removido for o primeiro...
prim = prim.prox;
else
ant.prox = aux.prox;
if(aux == ult) // se o nodo a ser removido for o ultimo...
ult = ant;
break;
}
ant = aux;
aux = aux.prox; // avança para o próximo nodo
}
}
public void imprimir()
{
NodoLista aux;
aux = prim;
while(aux != null)
{
System.out.println("Chave: " + aux.chave);
aux = aux.prox; // avança para o próximo nodo
}
}
}
class NodoLista
{
public int chave; // campo CHAVE da lista (pode ser de outro tipo)
/* INSIRA AQUI os demais campos da lista */
public NodoLista prox = null; // referencia para o proximo nodo da lista
}