Olá,
Estou com uma dúvida sobre Lista Ligada Duplamente ou Lista Duplamente Encadeada, gostaria de saber se na prática (na hora de executar é assim)
procurei na internet e mesmo assim não entendi o conceito.
Obs: se este tópico estiver na seção incorreta, peço que encaminhe para a seção correta, se for o caso.
a seguir o código:
/*Altere a implementao das Listas Ligadas Simples estudadas em aula
para comportar um Lista Duplamente Ligada (ou Lista Duplamente Encadeada)/
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){
novoNo.prox = primeiro;
primeiro = novoNo;
novoNo.ant = ultimo;
ultimo = novoNo;
}
public void InserirFinal (No novoNo){
novoNo.prox = null;
novoNo.ant=null;
if (primeiro == null)
primeiro = novoNo;
if (ultimo != null)
ultimo.prox = novoNo;
ultimo = novoNo;
primeiro.ant = novoNo;
primeiro=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;
NroNos = ContarNos( );
if (posicao == 0){
NovoNo.prox = primeiro;
NovoNo.ant = ultimo;
if (primeiro == ultimo)
ultimo = NovoNo;
primeiro = NovoNo;
}else{
if (posicao <= NroNos){
PosAux = 1;
while (NoTemp != null && posicao > PosAux){
NoTemp = NoTemp.prox;
PosAux = PosAux + 1;
}
NovoNo.prox = NoTemp.prox;
NoTemp.prox = NovoNo;
NoTemp.ant = NovoNo;
}else
if (posicao > NroNos){
ultimo.prox = NovoNo;
ultimo = NovoNo;
}
}
}
public void Remover (int elemento){
No NoTemp = primeiro;
if (NoTemp.elemento == elemento){
primeiro = NoTemp.prox;
ultimo = NoTemp.ant;
System.out.println("\nElemento "+elemento+" removido com sucesso \n");
}
else{
while (NoTemp.prox != null && NoTemp.prox.elemento != elemento)
NoTemp = NoTemp.prox;
NoTemp = NoTemp.ant;
if(NoTemp.prox != null){
NoTemp.prox = NoTemp.prox.prox;
if (ultimo == NoTemp.prox)
ultimo = NoTemp;
primeiro = NoTemp.ant;
System.out.println("\nElemento "+elemento+" removido com sucesso \n");
}
else
System.out.println("\nElemento "+elemento+" nao encontrado \n");
}
}
public void ElementoInicio( ){
System.out.println("O primeiro elemento é " + primeiro.elemento);
}
public void ElementoFinal( ){
System.out.println("O ultimo elemento é "+ultimo.elemento);
}
public No BuscaNo (int elemento){
int i = 0;
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 = 0;
No NoTemp = primeiro;
while (NoTemp != null){
System.out.println("Elemento " + NoTemp.elemento +" posicao " + i);
NoTemp = NoTemp.prox;
i = i + 1;
System.out.println("Elemento anterior " + NoTemp.elemento +" posicao " + i);
NoTemp = NoTemp.ant;
i = i - 1;
}
System.out.println("\n");
}
}
//método Main
public static void main (String arg []){
ListaLigada Lista = new ListaLigada();
int i;
int elemento=0;
No entrada = null;
String nom="";
for (i = 1 ; i <= 5 ; i++){
nom=JOptionPane.showInputDialog(null,"Digite o nome "+i);
elemento=Integer.parseInt(JOptionPane.showInputDialog("Digite o elemento "+i));
entrada = new No(nom,elemento);
Lista.InserirFinal(entrada);
}
Lista.MostrarLista();
entrada = new No(nom,elemento);
Lista.InserirInicio(entrada);
Lista.MostrarLista();
entrada = new No(nom,elemento);
Lista.InserirFinal(entrada);
Lista.MostrarLista();
entrada = new No(nom,elemento);
Lista.InserirMeio(entrada,4);
Lista.MostrarLista();
Lista.Remover(34);
Lista.MostrarLista();
System.exit(0);
}