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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Como invertir lista sencilla con el uso de nodos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Como invertir lista sencilla con el uso de nodos  (Leído 2,811 veces)
betast

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Como invertir lista sencilla con el uso de nodos
« en: 21 Abril 2019, 18:39 pm »

Hola amigos, tengo este codigo donde utilizo un nodo ubicado en la cabecera(cab) y otro al final(fin).
Quiero saber como puedo mostrar de forma inversa los datos ingresados.

CODIGO:

Código
  1. package metodos;
  2. import javax.swing.JOptionPane;
  3.  
  4. public class lista {
  5.    nodo cab;
  6.    nodo fin;
  7.  
  8.    lista(){
  9.        cab = fin = null;
  10.    }
  11.  
  12.    nodo getNodo(int cod){
  13.        nodo p;
  14.        if( cab == null )
  15.            //lista vacia
  16.            return null;
  17.        else{
  18.            //la lista tiene al menos un nodo
  19.            p=cab;
  20.            while(p!=null){
  21.                if(p.codP == cod)
  22.                    return p;
  23.                else
  24.                    p=p.sig;
  25.            }
  26.            return null;
  27.        }
  28.    }
  29.  
  30.    //creamos el metodo get final
  31.    nodo getNodoEnd(int cod){
  32.        nodo p;
  33.        if( fin == null )
  34.            //lista vacia
  35.            return null;
  36.        else{
  37.            //la lista tiene al menos un nodo
  38.            p=fin;
  39.            while(p!=null){
  40.                if(p.codP == cod)
  41.                    return p;
  42.                else
  43.                    p=p.ant;
  44.            }
  45.            return null;
  46.        }
  47.    }    
  48.  
  49.    boolean getVacia(){
  50.        return cab==null?true:false;
  51.    }
  52.  
  53.    int getLonglista(){
  54.        if(getVacia())
  55.            return 0;
  56.        else{
  57.            int con=0;
  58.            nodo p=cab;
  59.            while(p!=null){
  60.                con++;
  61.                p=p.sig;
  62.            }
  63.            return con;
  64.        }
  65.    }
  66.  
  67.    void setAddFinal(nodo info){
  68.        nodo p, q;
  69.        if( cab == null ){
  70.            cab = info;
  71.            JOptionPane.showMessageDialog(null,
  72.            "Primer elemento agregado!!, la lista tiene 1 elemento.");
  73.        }else{
  74.            q = getNodo(info.codP);
  75.            if(q!=null)
  76.                JOptionPane.showMessageDialog(null,
  77.                "El código del producto ya esta registrado en la lista!!!");
  78.            else{
  79.                p=cab;
  80.                while(p.sig!=null){
  81.                    p=p.sig;
  82.                }
  83.                p.sig = info;
  84.                int tam = getLonglista();
  85.                JOptionPane.showMessageDialog(null,
  86.                "Nuevo elemento agregado al final de la lista,"+
  87.                " existen: "+tam+" elementos.");
  88.            }
  89.        }
  90.    }
  91.  
  92.    void getMostrarT(){
  93.        if(getVacia())
  94.            JOptionPane.showMessageDialog(null, "Lista vacia!!");
  95.        else{
  96.            nodo p=cab;
  97.            String aux="";
  98.            int con=0;
  99.            while(p!=null){
  100.                aux = "La información en la posición "+con+" es:\n";
  101.                aux += "Código Producto: "+p.codP+"\n";
  102.                aux += "Nombre Producto: "+p.nomP+"\n";
  103.                aux += "Precio Unitario: "+p.precioU+"\n";
  104.                JOptionPane.showMessageDialog(null, aux);
  105.                con++;
  106.                p=p.sig;
  107.            }
  108.        }
  109.    }
  110.  
  111.    void setElimN( int cod ){
  112.        nodo p = getNodo(cod);
  113.        if( cab == null ){
  114.            JOptionPane.showMessageDialog(null,
  115.            "Lista vacía...");
  116.        }else{
  117.            if(p==null){
  118.                JOptionPane.showMessageDialog(null, "Elemento no existe!");
  119.            }else{
  120.                nodo q = null;
  121.                if((cab.sig==null)&&( p == cab )){
  122.                    cab = p = null;
  123.                    JOptionPane.showMessageDialog(null,
  124.                    "Elemento eliminado.  Lista vacia!!!");
  125.                }
  126.                else if((cab.sig != null)&&(p == cab)){
  127.                    cab = p.sig;
  128.                    p.sig = null;
  129.                    p = null;
  130.                    JOptionPane.showMessageDialog(null,
  131.                    "Elemento eliminado.  Eliminado en la cabecera!!!");
  132.                }
  133.                else if( (p.sig != null)&&(p!=cab) ){
  134.                    q = cab;
  135.                    while( q.sig != p )
  136.                        q = q.sig;
  137.                    q.sig = p.sig;
  138.                    p.sig = null;
  139.                    p = null;
  140.                    JOptionPane.showMessageDialog(null,
  141.                    "Elemento eliminado!!!");
  142.                }
  143.                else{
  144.                    q = cab;
  145.                    while( q.sig != p )
  146.                        q = q.sig;
  147.                    q.sig = null;
  148.                    p = null;
  149.                    JOptionPane.showMessageDialog(null,
  150.                    "Elemento eliminado de la ultima posicion!!!");
  151.                }
  152.            }
  153.        }
  154.    }
  155. }
  156.  

Clase nodo:
Código
  1. package metodos;
  2.  
  3. /**
  4.  *
  5.  * @author Ruben
  6.  */
  7. public class nodo {
  8.    int codP;
  9.    String nomP;
  10.    float precioU;
  11.    nodo sig;
  12.    nodo ant;
  13.  
  14.    public nodo(int codP, String nomP, float precioU) {
  15.        this.codP = codP;
  16.        this.nomP = nomP;
  17.        this.precioU = precioU;
  18.        this.sig = null;
  19.        this.ant=null;
  20.    }
  21.  
  22. }
  23.  


Probador:
Código
  1. package metodos;
  2. import javax.swing.JOptionPane;
  3.  
  4. public class probador {
  5.  
  6.    public static void main(String args[]){
  7.        int op, cod;
  8.        String nomp;
  9.        float precio;
  10.        lista productos = new lista();
  11.        nodo aux=null;
  12.        do{
  13.            op=Integer.parseInt(JOptionPane.showInputDialog(
  14.            "Menu Principal \n"+
  15.            "1. Agregar Producto \n"+
  16.            "2. Mostrar Productos \n"+
  17.            "3. Eliminar Producto \n"+
  18.            "4. Eliminar elemento de una posicion \n"+        
  19.            "5. Eliminar elemntos repetidos \n"+
  20.            "6. Invertir lista \n"+
  21.            "7. Rotar elementos \n"+        
  22.            "8. Salir \n"+
  23.            "Entre su opción: "        
  24.            ));
  25.  
  26.            switch(op){
  27.                case 1:
  28.                    cod = Integer.parseInt(JOptionPane.showInputDialog(
  29.                    "Entre código del producto: "));
  30.                    nomp = JOptionPane.showInputDialog("Entre nombre producto: ");
  31.                    precio = Float.parseFloat(JOptionPane.showInputDialog(
  32.                    "Entre precio unitario: "));
  33.                    aux = new nodo(cod,nomp,precio);
  34.                    productos.setAddFinal(aux);
  35.                break;
  36.                case 2:
  37.                    productos.getMostrarT();
  38.                break;
  39.                case 3:
  40.                    cod = Integer.parseInt(JOptionPane.showInputDialog(
  41.                    "Entre código del producto: "));
  42.                    productos.setElimN(cod);
  43.                break;
  44.                case 4:
  45.                    cod = Integer.parseInt(JOptionPane.showInputDialog(
  46.                    "Ingrese elemento a borrar: "));
  47.                    productos.setElimN(cod);
  48.                break;
  49.                case 5:
  50.  
  51.                break;
  52.                case 6:
  53.                break;
  54.                case 7:
  55.  
  56.                break;
  57.                case 8:
  58.                    JOptionPane.showMessageDialog(null, "Adios!");
  59.                break;    
  60.                default:
  61.                    JOptionPane.showMessageDialog(null, "Opcion invalida!");
  62.            }
  63.  
  64.        }while(op!=8);
  65.        System.exit(0);
  66.    }
  67.  
  68. }
  69.  


En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.348


Ver Perfil
Re: Como invertir lista sencilla con el uso de nodos
« Respuesta #1 en: 22 Abril 2019, 00:19 am »

Te ubicas en el nodo final y recorres la lista hacia atrás. Acaba cuando llegas a la raíz (o un null, si no usas raíz).

Código:
funcion RecorrerHaciaAtras
    actual = lista.ultimonodo

    hacer mientras actual <> raiz  // nulo
        mostrar actual.dato
        actual = actual.anterior
    repetir
fin funcion


En línea

betast

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: Como invertir lista sencilla con el uso de nodos
« Respuesta #2 en: 22 Abril 2019, 01:14 am »

Amigo NEBIRE no te entendi, soy nuevo con ese tema

Te ubicas en el nodo final y recorres la lista hacia atrás. Acaba cuando llegas a la raíz (o un null, si no usas raíz).

Código:
funcion RecorrerHaciaAtras
    actual = lista.ultimonodo

    hacer mientras actual <> raiz  // nulo
        mostrar actual.dato
        actual = actual.anterior
    repetir
fin funcion
En línea

CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: Como invertir lista sencilla con el uso de nodos
« Respuesta #3 en: 22 Abril 2019, 21:01 pm »

Tu clase Nodo incluye un puntero hacia el Nodo anterior.
Usalos ubicandote primero al final de la lista, que tambien has establecido en tus clases.

En línea

Aqui mi perfil en LinkedIn, invitame un cafe aqui
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines