Array
(
    [0] => stdClass Object
        (
            [Votos_Balanceados] => 1
            [id] => 554010
            [titulo] => Implementar algoritmo na Lista Encadeada que remova todas as ocorrencias de um determinado elemento na lista encadeada.
            [dataCadastro] => DateTime Object
                (
                    [date] => 2016-05-16 10:43:01
                    [timezone_type] => 3
                    [timezone] => America/Sao_Paulo
                )

            [isFirstPost] => -1
            [idUsuario] => 418027
            [status] => A
            [isExample] => 
            [NomeUsuario] => Jothaz
            [Apelido] => 
            [Foto] => 418027_20150313165406.jpg
            [Conteudo] => [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]
        )

)

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

Brooklin
   - 16 mai 2016

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

Post mais votado

Jothaz
   - 16 mai 2016

Brooklin
   - 16 mai 2016

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.

Jothaz
   - 16 mai 2016

#Código

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


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


#Código

 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++;
	}
 }
 

Brooklin
   - 16 mai 2016

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!

Jothaz
   - 16 mai 2016

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

Brooklin
   - 18 mai 2016

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();

}
}

Jothaz
   - 18 mai 2016

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.

Brooklin
   - 18 mai 2016

#Código











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();

}
}