elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  listas genericas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: listas genericas  (Leído 5,635 veces)
SAGA-gl

Desconectado Desconectado

Mensajes: 45


Ver Perfil
listas genericas
« en: 20 Febrero 2016, 21:44 pm »

slds gente del foro.....verán estoy preparándome para un final de la facu y hay un método en el tema de asunto que no comprendo.....el método borrarMayor.....comprendo hasta el punto donde obtiene el nodo con mayor información....pero la eliminación no.....m pueden echar una mano....muchas grax
Código
  1. package listagenerica;
  2. public class ListaGenerica {
  3.    class Nodo{
  4.        int info;
  5.        Nodo sig;
  6.    }
  7.    private Nodo raiz;
  8.  
  9.    public void imprimir(){
  10.        Nodo reco=raiz;
  11.        while(reco!=null){
  12.            System.out.print(reco.info+" ");
  13.            reco=reco.sig;
  14.        }
  15.        System.out.println();
  16.    }
  17.  
  18.    public void insertarPrimero(int x){
  19.        Nodo nuevo=new Nodo();
  20.        nuevo.info=x;
  21.        nuevo.sig=raiz;
  22.        raiz=nuevo;
  23.    }
  24.  
  25.    public void insertarUltimo(int x){
  26.        Nodo nuevo=new Nodo();
  27.        nuevo.info=x;
  28.        Nodo reco=raiz;
  29.        while(reco.sig!=null){
  30.            reco=reco.sig;
  31.        }
  32.        reco.sig=nuevo;
  33.    }
  34.  
  35.    public void insertarSegundo(int x){
  36.        Nodo nuevo=new Nodo();
  37.        nuevo.info=x;
  38.        if(raiz!=null){
  39.            if(raiz.sig==null)
  40.                raiz.sig=nuevo;
  41.            else{
  42.                nuevo.sig=raiz.sig;
  43.                raiz.sig=nuevo;
  44.            }
  45.  
  46.        }
  47.    }
  48.    public void insertarAnteUltimo(int x){
  49.        Nodo nuevo=new Nodo();
  50.        nuevo.info=x;
  51.        Nodo anterior=raiz;
  52.        Nodo reco=raiz.sig;
  53.        if(raiz!=null){
  54.            while(reco.sig!=null){
  55.                anterior=reco;
  56.                reco=reco.sig;
  57.            }
  58.            nuevo.sig=anterior.sig;
  59.            anterior.sig=nuevo;
  60.  
  61.        }
  62.    }
  63.    public void borrarPrimero(){
  64.        if(raiz!=null){
  65.            if(raiz.sig==null)
  66.                raiz=null;
  67.            else{
  68.                raiz=raiz.sig;
  69.            }
  70.        }
  71.    }
  72.    public void borrarSegundo(){
  73.        if(raiz!=null){
  74.            if(raiz.sig==null){
  75.                raiz=null;
  76.            }
  77.            else{
  78.                raiz.sig=raiz.sig.sig;
  79.            }
  80.        }
  81.    }
  82.    public void borrarUltimo(){
  83.        Nodo atras=raiz;
  84.        Nodo reco=raiz.sig;
  85.        if(raiz!=null){
  86.            if(raiz.sig==null){
  87.                raiz=null;
  88.            }
  89.            else{
  90.                while(reco.sig!=null){
  91.                    atras=reco;
  92.                    reco=reco.sig;
  93.                }
  94.                atras.sig=null;
  95.            }
  96.        }
  97.    }
  98. public void borrarMayor() {
  99.        if (raiz!=null) {
  100.            Nodo reco=raiz;
  101.            int may=raiz.info;
  102.            while (reco!=null) {
  103.                if (reco.info>may) {
  104.                    may=reco.info;
  105.                }
  106.                reco=reco.sig;
  107.            }
  108.            reco=raiz;
  109.            Nodo atras=raiz;
  110.            while (reco!=null) {
  111.                if (reco.info==may) {
  112.                    if (reco==raiz) {
  113.                        raiz=raiz.sig;
  114.                        atras=raiz;
  115.                        reco=raiz;
  116.                    } else {
  117.                        atras.sig=reco.sig;
  118.                        reco=reco.sig;
  119.                    }
  120.                } else {
  121.                    atras=reco;
  122.                    reco=reco.sig;
  123.                }
  124.            }
  125.        }
  126.    }
  127.  
  128.  
  129.    public static void main(String[] args) {
  130.        ListaGenerica l=new ListaGenerica();
  131.        l.insertarPrimero(2);
  132.        l.insertarPrimero(1);
  133.        l.insertarUltimo(3);
  134.        l.insertarSegundo(8);
  135.        l.insertarAnteUltimo(9);
  136.        l.imprimir();
  137.        l.borrarPrimero();
  138.        l.imprimir();
  139.        l.borrarUltimo();
  140.        l.imprimir();
  141.  
  142.    }
  143.  
  144. }
  145.  


En línea

sodark

Desconectado Desconectado

Mensajes: 81


Ver Perfil WWW
Re: listas genericas
« Respuesta #1 en: 21 Febrero 2016, 01:25 am »

Aunque el codigo es duro de entender, creo que lo que hace es:

- Busco al que tiene mayor y me guardo el valor del mayor (cosa tonta pudiendo guardar directamente el nodo).
- Ahora busco al que hay antes del nodo, y voy comparando hasta encontrar de nuevo el nodo que hemos encontrado antes y lo vuelvo a comparar con el resultado del mayor
- Mientras no lo encuentre, me guardo en el punterio anterior el nodo que acabo de comparar y en el nodo reco (entiendo que es el usa para recorrer) el nodo siguiente.
- Una vez lo encuentro, compruebo si es la raiz. Si es asi, actualizo los punteros de antes y depues de la raiz para que apunten a si mismo (en vez de controlar y devolver que la lista esta vacia...).
- En el caso de no ser la raiz, lo quito de la lista. Como? Bueno el funcionamiento de una lista, es que cada nodo apunta a su siguiente, de forma que si haces que un nodo en vez de apuntar al siguiente, apunte al de despues, estaras haciendo que nadie referencie a ese nodo que quieres quitar y por lo tanto dejandolo inacesible, por lo tanto quitandolo de la lista.




En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
DLLs Genericas con VB6
Programación Visual Basic
Castord 3 5,608 Último mensaje 19 Agosto 2006, 03:17 am
por Castord
Clases Genericas
Java
Lu15_CL4 4 6,262 Último mensaje 7 Noviembre 2009, 01:58 am
por Leyer
Problema al usar Listas Genericas y Acceso a datos
.NET (C#, VB.NET, ASP)
israelchris 1 5,168 Último mensaje 27 Agosto 2010, 23:01 pm
por [D4N93R]
Ayuda Acerca De Listas y Listas Circulares (Revienta Memoria :S)
Programación C/C++
Gerik 0 6,043 Último mensaje 12 Septiembre 2010, 01:49 am
por Gerik
Duda preguntas genéricas
Desarrollo Web
mysqlway 1 2,263 Último mensaje 13 Enero 2015, 11:51 am
por #!drvy
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines