Código de Java - Lista doblemente enlazada de nodos 2022

Imágen de perfil

Lista doblemente enlazada de nodos 2022gráfica de visualizaciones


Java

Publicado el 3 de Septiembre del 2022 por Rafael Angel (15 códigos)
1.125 visualizaciones desde el 3 de Septiembre del 2022
Un ejemplo basado en http://codigolibre.weebly.com/blog/listas-simples-en-java
De una lista doblemente enlazada, la programada de la lista es personalizada, las declaraciones estan en palabras completas, nada de abreviaturas.

Requerimientos

Java, conocer del tema de nodos nociones lo basico o avanzado.
Sino leer un poco del tema.

1.0

Publicado el 3 de Septiembre del 2022gráfica de visualizaciones de la versión: 1.0
1.126 visualizaciones desde el 3 de Septiembre del 2022
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

Version actualizada y revisada al 2022.
Esta version es una demostracion muy clara acerca del diseño de una lista doblemente enlazada.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 */
package Nodos;
 
/**
 *
 * @author Rafael Angel Montero Fernández.
 * Correo rafaelangelmfx@gmail.com
 * Celular de Costa Rica +506 83942235
 *
 * Basado en http://codigolibre.weebly.com/blog/listas-simples-en-java
 */
public class ListaDoblementeEnlazadaDeNodos {
 
    private  Nodo ListaDeNodos=null;
 
 
    public void eliminarListaDeNodos(){
        // Elimina el valor y la referencia a los demas nodos.
        ListaDeNodos = null;
        // Reinicia el contador de tamaño de la lista a 0.
        tamaño = 0;
    }
 
    /**
     * Consulta si el valor de referencia existe en la lista.
     * @param referencia
     */
    public void removerPorReferencia(Nodo referencia){
 
        if (buscar(referencia)) {
            // Consulta si el nodo a eliminar es el pirmero
            if (ListaDeNodos.getNombre().equalsIgnoreCase(referencia.getNombre())==true ) {
                // El primer nodo apunta al siguiente.
                ListaDeNodos = ListaDeNodos.siguiente;
            } else{
                // Crea ua copia de la lista.
                Nodo aux = ListaDeNodos;
                // Recorre la lista hasta llegar al nodo anterior
                // al de referencia.
                while(aux.getNombre().equalsIgnoreCase(referencia.getNombre())!=true){
                    aux = aux.siguiente;
                }
                // Guarda el nodo siguiente del nodo a eliminar.
                Nodo siguiente = aux.siguiente.siguiente;
                // Enlaza el nodo anterior al de eliminar con el
                // sguiente despues de el.
                aux.siguiente=siguiente;
            }
            // Disminuye el contador de tamaño de la lista.
            tamaño--;
        }
    }
 
    public void editarPorReferencia(Nodo referencia, Nodo nuevo_nodo){
        // Consulta si el valor existe en la lista.
        if (buscar(referencia)==true) {
            // Crea ua copia de la lista.
            Nodo aux = ListaDeNodos;
            // Recorre la lista hasta llegar al nodo de referencia.
            while(aux.getNombre().equalsIgnoreCase(referencia.getNombre())==false){
                aux = aux.siguiente;
            }
            // Actualizamos el valor del nodo
            aux.setNombre(referencia.getNombre());
            aux.setValor(referencia.getValor());
            aux.setId(referencia.getId());
        }
    }
 
    /**
     * throw new Exception("Posicion inexistente en la lista."); Se usa para lanzar errores personalizados.
     * @param nuevo_nodo
     * @return
     */
    public Nodo getValor(Nodo nuevo_nodo){
        try{
             // Crea una copia de la lista.
            Nodo aux = ListaDeNodos;
            // Recorre la lista hasta la posición ingresada.
            if(buscar(nuevo_nodo)==true){
                for (int i = 0; i < posicion; i++) {
                    aux = aux.siguiente;
                }
                return aux;
            }
        }catch(Exception e){
 
        }
           return new Nodo();
    }
 
    /**
     * busca por nombre.
     * @param nombre recive un String como parametro.
     * @return Retorna el Nodo consultado con datos completos.
     */
    public Nodo getValor(String nombre){
        try{
            Nodo aux = ListaDeNodos;
            Nodo nodo_consulta=new Nodo();
            nodo_consulta.setNombre(nombre);
            if(buscar(nodo_consulta)==true){
                for (int i = 0; i < posicion; i++) {
                    aux = aux.siguiente;
                }
                return aux;
            }
        }catch(Exception e){
 
        }
           return new Nodo();
    }
 
    public boolean estaBacio(){
        return ListaDeNodos==null;
    }
 
    private int tamaño=0;
    public int getTamaño(){
        return tamaño;
    }
 
    public void agregarSiguiente(Nodo nuevo_nodo){
        Nodo nodoTemporal=null;
 
        if(estaBacio()==true){
            ListaDeNodos=nuevo_nodo;
        }else{
            nodoTemporal=ListaDeNodos;
            tamaño=0;
            while(nodoTemporal.siguiente!=null){
                nodoTemporal=nodoTemporal.siguiente;
                tamaño++;
            }
//            nuevo_nodo.setId(tamaño);
            nodoTemporal.siguiente=nuevo_nodo;
        }
 
    }
 
    public void agregarAnterior(Nodo nuevo_nodo){
        if (this.estaBacio()==true) {
            ListaDeNodos = nuevo_nodo;
        } else{
            nuevo_nodo.siguiente=ListaDeNodos;
            ListaDeNodos = nuevo_nodo;
            //Por alguna extraña razon queda de siguiente.
//            System.out.println("agregarAnterior sigueinte= " + ListaDeNodos.siguiente.getNombre());
        }
        tamaño++;
    }
    /**
     * !estaBacio() si es false lo convierte en true y si es true lo convierte en false.
     * @param referencia
     * @param nuevo_nodo
     */
    public void insertarPorReferencia(Nodo nodo_de_referencia, Nodo nuevo_nodo){
        if (estaBacio()==false) {
            if (buscar(nodo_de_referencia)==true) {
                Nodo aux = ListaDeNodos;
                while (aux.getNombre().equalsIgnoreCase(nodo_de_referencia.getNombre())==false) {
                    System.out.println("Buscando en insertarPorReferencia");
                    aux = aux.siguiente;
                }
                Nodo continuacion = aux.siguiente;
                aux.siguiente=nuevo_nodo;
                nuevo_nodo.siguiente=continuacion;
                tamaño++;
            }
        }
    }
 
    private int posicion=0;
 
    public boolean buscar(Nodo referencia){
        posicion=0;
        Nodo aux = ListaDeNodos;
        boolean encontrado = false;
        while(aux != null && encontrado != true){
            if (referencia.getNombre().equalsIgnoreCase(aux.getNombre()) ==true){
                encontrado = true;
                return encontrado;//Detiene el recorrido aqui antes que incremente al contador "posicion"
            }
            else{
                aux = aux.siguiente;
            }
            posicion++;
        }
        return encontrado;
    }
 
    @Override
    public String toString(){
        Nodo aux = ListaDeNodos;
        String informe="Datos de los nodos\n\n\n";
        try{
            boolean encontrado = false;
            while(aux != null && encontrado != true){
                informe+=aux.toString() +"\n";
                aux = aux.siguiente;
            }
        }catch(Exception e){
 
        }
        return informe;
    }
 
}



Comentarios sobre la versión: 1.0 (0)


No hay comentarios
 

Comentar la versión: 1.0

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad

http://lwp-l.com/s7274