Implementar algoritmo na Lista Encadeada que remova todas as ocorrencias de um determinado elemento na lista encadeada.

16/05/2016

0

Oie Pessoal gostaria quem puder me ajudar com esse problema. Até então não por onde comecar.

Implementar um método que remova todas as ocorrências de um determinado elemento na Lista encadeada.

Ex:
2->10->4->10->13

removerElemento(10)

ficaria
2->4->13
Jaimes Brooklin

Jaimes Brooklin

Responder

Post mais votado

16/05/2016

[url:descricao=Estruturas de Dados em C#: Part 1 :: Lista Simplesmente Encadeada]https://murilocurti.wordpress.com/2004/11/03/estruturas-de-dados-em-c-part-1-lista-simplesmente-encadeada/[/url]

Jothaz

Jothaz
Responder

Mais Posts

16/05/2016

Jaimes Brooklin

Oi amigo essa parte ai sobre insere no inicio, remover, ja fiz essa parte, minha duvida é que como fazer pra remover números que aparecam repetidamente na lista, ou seja vou teque fazer um método pra listar quais os números repetidos e depois chamar o metodo remove em qualquer posicão que eu ja tenho ele implementado essa foi a sugestão do meu professor só que não ficou bem claro pra mim. Quem puder me ajudar eu agradeco.
Responder

16/05/2016

Jothaz

list.Sort();
Int32 index = 0;
while (index < list.Count - 1)
{
    if (list[index] == list[index + 1])
        list.RemoveAt(index);
    else
        index++;
}


public static List<T> Deduplicate<T>(this List<T> listToDeduplicados)
{
    return listToDeduplicados.Distinct().ToList();
}



 int i = 1;
 while(i<list.Count)
 {
	int j = 0;
	bool remove = false;
	while (j < i && !remove)
	{
	   if (list[i].Equals(list[j]))
	   {
		  remove = true;
	   }
	   j++;
	}
	if (remove)
	{
	   list.RemoveAt(i);
	}
	else
	{
	   i++;
	}
 }
 
Responder

16/05/2016

Jaimes Brooklin

Valeu amigo, por esse código me deu pra ter uma lógica, porque no meu caso tenho que implementar sem esses métodos prontos. Mas valeu assim mesmo!
Responder

16/05/2016

Jothaz

Por isto postei várias formas de abordar a questão.
Responder

18/05/2016

Jaimes Brooklin

OI Jothaz bom dia.

Até aqui implemetei esse método que é pra remover os números recorrentes mas não onde esta o erro
na impressão não está removendo o numero se puder me ajudar agradeco!


/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package estruturasDados;

/**
*
* @author
*/
public class Lista {

private Celula inicio;
private Celula fim;

public void adiciona(int conteudo) {
Celula nova = new Celula();
nova.setConteudo(conteudo);
nova.setProx(inicio);
if (ehVazia()) {
fim = nova;
}
inicio = nova;
}

public void adicionaFim(int conteudo) {
if (ehVazia()) {
adiciona(conteudo);
} else {
Celula nova = new Celula();
nova.setConteudo(conteudo);
nova.setProx(null);
fim.setProx(nova);
fim = nova;
}
}

public void adiciona(int conteudo, int posicao) {
Celula ant = getCelula(posicao);
if (ant == null) {
if (posicao == 1) {
adiciona(conteudo);
} else {
adicionaFim(conteudo);
}
} else {
Celula nova = new Celula();
nova.setConteudo(conteudo);
nova.setProx(ant.getProx());
ant.setProx(nova);
}
}

public void removeInicio() {
if (!ehVazia()) {
inicio = inicio.getProx();
}
}

public void removeFim() {
if (!ehVazia()) {
if (inicio == fim) {
removeInicio();
} else {
Celula it = inicio;
while (it.getProx() != fim) {
it = it.getProx();
}
it.setProx(null);
fim = it;
}

}
}

public void remove(int posicao) {
if (!ehVazia()) {
if (posicao == 1) {
removeInicio();
} else {
Celula ant = getCelula(posicao);
if (ant != fim && ant != null) {
Celula aux = ant.getProx();
ant.setProx(aux.getProx());
aux.setProx(null);
}
}
}
}

public boolean pesquisa(int chave) {
Celula it = inicio;
while (it != null) {
if (it.getConteudo() == chave) {
return true;
} else {
it = it.getProx();
}
}
return false;
}

public boolean ehVazia() {
if (inicio == null) {
fim = null;
return true;
} else {
return false;
}
}

public void percorreLista() {
Celula it = inicio;
while (it != null) {
System.out.print(it.getConteudo() + "->");
it = it.getProx();
}
System.out.println("");
}

public String percorreLista2() {
Celula it = inicio;
String s = "";
while (it != null) {
s = s + it.getConteudo() + "->";
it = it.getProx();
}
s = s + "\n";
return s;
}

/**
* Método que retorna a celula anterior a posicao
*
* @param posicao um inteiro >=1
* @return a celula anterior a posicao
*/
private Celula getCelula(int posicao) {
if (!ehVazia()) {
int i = 1;
Celula it = inicio;
while ((posicao - 1 != i) && (it != null)) {
it = it.getProx();
i++;
}
return it;
}
return null;
}

public void removeElemento(int elemento) {
if (!ehVazia()) {
Celula aux = inicio;
int cont = 0;
while(aux!=null){
if (elemento==aux.getConteudo()) {
remove(cont);
}
else{
cont++;
}
aux.getProx();
}

}

}

}
public class Main {
public static void main(String[] args) {
Lista listaNumeros = new Lista();
listaNumeros.adiciona(9);
listaNumeros.adiciona(3);
listaNumeros.adicionaFim(5);
//System.out.println("Impressão da lista");
//listaNumeros.percorreLista();
listaNumeros.removeInicio();
//System.out.println("Após remoção do inicio");
listaNumeros.percorreLista();
listaNumeros.adiciona(3);
//System.out.println("Impressão da lista com 3 de novo");
listaNumeros.percorreLista();
//listaNumeros.removeFim();
System.out.println("Após remoção do fim");
listaNumeros.percorreLista();
listaNumeros.removeElemento(3);
//System.out.println("Após remoção do fim");
listaNumeros.percorreLista();

}
}
Responder

18/05/2016

Jothaz

Brother quando postar códigos use a tag code "</>" primeiro ícone a esquerda, do contrário fica muito difícil a leitura e a ajuda.

Por favor poste o código usando a tag code.
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar