Lista encadeada

1 resposta
E

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
}

1 Resposta

P

É simples ele verifica se o nodo que queres remover é o primeiro ele coloca a referencia inicial no segundo nodo assim o primeiro já era, se for o ultimo ele tira a referencia de proximo penultimo assim ele vira o ultimo, se for um do meio por exemplo o terceiro, ele aponta do segundo para o quarto.

Criado 29 de setembro de 2006
Ultima resposta 29 de set. de 2006
Respostas 1
Participantes 2