Remover um elemento duma lista ligada

3 respostas
YoungT

Please ajudem-me com um metodo que remove um elemento que nao esteja na cabeca de uma lista simplesmente ligada…

3 Respostas

ghostta

Posta o codigo e fale com mais clareza…

YoungT

nao tenho o codigo cmgo pois tou num net cafe, mas o codigo sta assim

uma lista simplesmente ligada, em que cada elemento tem um apontador para o proximo elemento
e eu tenho que desenvolver um codigo que possa remover qualquer um dos elementos dependendo do utilizador.

gpd38

Remove qualquer no da sua lista

Metodo que vc quer fazer

Entenda e modifique se necessario

public void Remover(int elemento)
	{
		No NoTemp = primeiro;
		No NoAnt = null;
		
		if (primeiro.elemento == elemento)
		{
			primeiro = primeiro.prox;
		}
		else
		{
			while (NoTemp !=null && NoTemp.elemento != elemento)
			{
				NoAnt = NoTemp;
				NoTemp = NoTemp.prox;
			}
			
			if(NoTemp != null)
			{
				NoAnt.prox = NoTemp.prox;
			}
			if(NoTemp == ultimo)
			{
				ultimo = NoAnt;
			}
		}
	}

Classe inteira

import javax.swing.*;

class No
{
	int elemento;
	No prox;
	
	No (int elem){
		elemento = elem;
		prox = null;
	}
 }

class ListaLigada
{
	No primeiro, ultimo;
	
	ListaLigada ()
	{
		primeiro = null;
		ultimo = null;
	}
	
	public boolean ListaVazia()
	{
		if (primeiro == null && ultimo == null)
		{
			return true;
		}
		else
		{
			return false;
		}
	}
	
	public void InserirInicio(No novoNo)
	{
		if (ListaVazia())
		{
			ultimo = novoNo;
		}
		else
		{
			novoNo.prox = primeiro;
		}
		primeiro = novoNo;
	}
	
	public void InserirFinal(No novoNo)
	{
		if (ListaVazia())
		{
			primeiro = novoNo;
		}
		else
		{
			ultimo.prox = novoNo;
		}
		ultimo = novoNo;
	}
	
	public int ContarNos()
	{
		int tamanho = 0;
		No NoTemp = primeiro;
		
		while (NoTemp !=null)
		{
			tamanho = tamanho+1;
			NoTemp = NoTemp.prox;
		}
		return tamanho;
	}
	
	public void InserirMeio(No NovoNo, int posicao)
	{
		No NoTemp = primeiro;
		int NroNos, posAux = 1;
		
		NroNos = ContarNos();
		
		if(posicao <= 1)
		{
			InserirInicio(NovoNo);
		}
		else
		{
			if (posicao > NroNos)
			{
				InserirFinal(NovoNo);
			}
			else
			{
				while (posAux < (posicao -1))
				{
					NoTemp = NoTemp.prox;
					posAux = posAux + 1;
				}
				NovoNo.prox = NoTemp.prox;
				NoTemp.prox = NovoNo;
			}
		}
	}
	
	public void Remover(int elemento)
	{
		No NoTemp = primeiro;
		No NoAnt = null;
		
		if (primeiro.elemento == elemento)
		{
			primeiro = primeiro.prox;
		}
		else
		{
			while (NoTemp !=null && NoTemp.elemento != elemento)
			{
				NoAnt = NoTemp;
				NoTemp = NoTemp.prox;
			}
			
			if(NoTemp != null)
			{
				NoAnt.prox = NoTemp.prox;
			}
			if(NoTemp == ultimo)
			{
				ultimo = NoAnt;
			}
		}
	}
	
	public void ElementoInicio()
	{
		if(!ListaVazia())
		{
			System.out.println("O primeiro elemento  "+primeiro.elemento);
		}
		else
		{
			System.out.println("Lista ligada vazia");
		}
	}
	
	public void ElementoFinal()
	{
		if(!ListaVazia())
		{
			System.out.println("O ltimo elemento  "+ultimo.elemento);
		}
		else
		{
			System.out.println("Lista ligada vazia");
		}
	}
	
	public No BuscarNo (int elemento)
	{
		int i = 1;
		No NoTemp = primeiro;
		
		while (NoTemp !=null)
		{
			if(NoTemp.elemento == elemento)
			{
				System.out.println("No "+ NoTemp.elemento + " posicao " +i);
				return NoTemp;
			}
			i = i +1;
			NoTemp = NoTemp.prox;
		}
		return null;
	}
	
	public void MostrarLista()
	{
		int i = 1;
		No NoTemp = primeiro;
		
		while (NoTemp !=null)
		{
			System.out.println("Elemento " + NoTemp.elemento + " posicao " +i );
			NoTemp = NoTemp.prox;
			i = i +1;
		}
	}
}

class Exemplo1
{
	public static void main (String args[])
	{
		ListaLigada realLista = new ListaLigada();
		int i;
		int num;
		
		for (i = 1; i<=5; i++)
		{
			num = Integer.parseInt(JOptionPane.showInputDialog("Digite um nr ")	);
			realLista.InserirFinal(new No(num));
		}
		realLista.MostrarLista();
		System.exit(0);
	}
}
Criado 7 de novembro de 2008
Ultima resposta 8 de nov. de 2008
Respostas 3
Participantes 3