Java - Ordenamiento de una lista enlazada

 
Vista:
sin imagen de perfil
Val: 14
Ha aumentado su posición en 8 puestos en Java (en relación al último mes)
Gráfica de Java

Ordenamiento de una lista enlazada

Publicado por Francisco (10 intervenciones) el 22/10/2019 01:03:59
Buen día foro espero poder recibir ayuda en verdad que la necesito tengo el siguiente problema tengo que realizar una lista genérica donde ingrese datos de tipo int y estos al momento de mostrarlos al usuario deben estar ordenados la verdad ya he intentado varias cosas pero ninguna me funciona este es el codigo que llevo hasta el momento:

Mi clase Nodo:

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
public class Nodo<T> {
 
    T dato;
    Nodo enlace;
 
    public Nodo(T p) {
        dato = p;
        enlace = null;
    }
    public Nodo(T p, Nodo n) {
        dato = p;
        enlace = n;
    }
    public T getDato() {
        return dato;
    }
    public Nodo getEnlace() {
        return enlace;
    }
    public void setDato(T dato) {
        this.dato = dato;
    }
 
    public void setEnlace(Nodo enlace) {
        this.enlace = enlace;
    }
 
}


Mi clase lista:

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
public class Lista<T> {
 
    protected Nodo primero, ultimo;
    T p;
 
    public Lista() {
        primero = null;
        ultimo = null;
    }
 
    public boolean EstaVacia() {
        if (primero == null) {
            return true;
        } else {
            return false;
        }
    }
 
    public T insertarCabezaLista(T p) {
        primero = new Nodo(p, primero);
        if (ultimo == null) {
            ultimo = primero;
        }
        return null;
    }
 
    public T insertarCola(T p) {
        if (!EstaVacia()) {
            ultimo.enlace = new Nodo(p);
            ultimo = ultimo.enlace;
 
        } else {
            primero = ultimo = new Nodo(p);
        }
        return null;
    }
 
    public void visualizar() {
        Nodo<Integer> n = primero;
        System.out.println();
        while (n != null) {
            System.out.print("[" + n.dato + "]-->");
            n = n.enlace;
        }
    }
 
    //Eliminar un nodo especifico
    public void eliminar(T p) {
        if (!EstaVacia()) {
            if (primero == ultimo && p == primero.dato) {
                primero = ultimo = null;
            } else if (p == primero.dato) {
                primero = primero.enlace;
            } else {
                Nodo anterior, temporal;
                anterior = primero;
                temporal = primero.enlace;
                while (temporal != null && temporal.dato != p) {
                    anterior = anterior.enlace;
                    temporal = temporal.enlace;
                }
                if (temporal != null) {
                    anterior.enlace = temporal.enlace;
                    if (temporal == ultimo) {
                        ultimo = anterior;
                    }
                }
            }
        }
    }
 
    // buscar si un elemnento se encunetra en la lista
    public boolean EstaEnLaLista(T p) {
        Nodo temporal = primero;
        while (temporal != null && temporal.dato != p) {
            temporal = temporal.enlace;
        }
        return temporal != null;
    }
 
    public void insertar(Nodo nodo, int posicion) {
        Nodo temporal = primero;
        int i = 1;
        while (i < posicion && temporal.enlace != null) {
            i++;
            temporal = temporal.enlace;
        }
        nodo.enlace = temporal.enlace;
        temporal.enlace = nodo;
    }
 
}

Y por ultimo mi clase prueba:

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
public class PruebaLista {
 
    public static void main(String[] args) {
        Lista<Integer> listita = new Lista<Integer>();
        int opcion, el;
 
        do {
            opcion = Integer.parseInt(JOptionPane.showInputDialog(null,
                    "1.-Agregar  un  elemento al inicio de la lista\n2.-Mostrar los "
                    + "datos de la lista\n3.-Agregar al final\n4.-Eliminar un nodo especifico\n"
                    + "5.- Buscar un elmento en la lista\n" + "6.- Insertar un elemento entre dos elementos \n"
                    + "7.- Salir"));
 
 
            switch (opcion) {
                case 1:
                    el = Integer.parseInt(JOptionPane.showInputDialog(null, "Ingrese un numero: "));
                    listita.insertarCabezaLista(el);
                    break;
                case 2:
                    listita.visualizar();
                    break;
                case 3:
                    el = Integer.parseInt(JOptionPane.showInputDialog(null, "Ingrese un numero: "));
                    listita.insertarCola(el);
                    break;
                case 4:
                    el = Integer.parseInt(JOptionPane.showInputDialog(null, "Ingrese un numero a eliminar:"));
                    listita.eliminar(el);
                    JOptionPane.showMessageDialog(null, "El elemento eliminado es: " + el);
                    break;
                case 5:
                    el = Integer.parseInt(JOptionPane.showInputDialog(null, "Ingrese el elemento a buscar"));
                    if (listita.EstaEnLaLista(el) == true) {
                        JOptionPane.showMessageDialog(null, "El elemento: " + el + " si esta en la lista");
                    } else {
                        JOptionPane.showMessageDialog(null, "El elemento: " + el + " no esta en la lista");
                    }
                    break;
                case 6:
                    Nodo ele = new Nodo(Integer.parseInt(JOptionPane.showInputDialog(null,
                            "Ingrese el elemento a agregar")));
                    int posicion = Integer.parseInt(JOptionPane.showInputDialog(null,
                            "Ingrese despues de que\n"
                            + " posicion lo desea ingresar"));
 
                    listita.insertar(ele, posicion);
 
                    break;
                case 7:
                    JOptionPane.showMessageDialog(null, "Programa finalizado");
                    break;
                default:
                    JOptionPane.showMessageDialog(null, "Opcion incorrecta");
                    break;
            }
 
        } while (opcion != 7);
 
    }
 
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ordenamiento de una lista enlazada

Publicado por Rodrigo (623 intervenciones) el 22/10/2019 01:36:22
Tienes que conservar el orden inicial?
Por que no crear un metodo insertarEnOrden y usarlo en vez de usar los otros que no te sirven?

Otra opcion es ordernarlos justo antes de imprimirlos,

Aqui una manera aproximada y bien ineficiente de hacerlo:

1- contar el numero de elementos de la lista para saber cuando terminar
2- Buscar el menor
3- imprimirlo
4- Buscar numeros iguales al anterior e imprimirlos
5- Si no hay iguales, buscar el menor de los mayores al menor actual y repetir la misma accion desde el punto 3. actualizar cual es el menor.

Se acaba la iteracion una vez que se hayan impreso tantos numeros como la lista tiene elementos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar