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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Tutorial invertir lista simple en java a travez de nodos by.AmeRiK@nO
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Tutorial invertir lista simple en java a travez de nodos by.AmeRiK@nO  (Leído 13,268 veces)
Amerikano|Cls


Desconectado Desconectado

Mensajes: 789


[Beyond This Life]


Ver Perfil WWW
Tutorial invertir lista simple en java a travez de nodos by.AmeRiK@nO
« en: 23 Noviembre 2008, 18:42 pm »

Hola a todos, este es un pequeño tute que explica de forma breve un método que tuve que hacer para la universidad que invierte el orden de una lista sencilla en Java. Bueno empecemos.

El escenario es el siguiente:

Hay una clase Region.java, la cual posee un nombre, una area, una coordenada a travez de una clase Coordenada.java y finalmente una referencia tipo Region hacia la siguiente region para poder tener la lista  ;), hay una clase llamada Colombia.java la cual posee la lista de las Regiones, la cantidad, y la referencia tipo Region hacia la primera:

Clase Coordenada.java packete mundo:

Código
  1. package mundo;
  2.  
  3. import javax.swing.JComponent;
  4.  
  5. public class Coordenada {
  6.  
  7. private int x;
  8. private int y;
  9.  
  10. public Coordenada(int x, int y){
  11. this.x = x;
  12. this.y = y;
  13. }
  14.  
  15. public int getX(){
  16. return x;
  17. }
  18.  
  19. public int getY(){
  20. return y;
  21. }
  22. }
  23.  

La clase Region.java es la siguiente:

Código
  1. package mundo;
  2.  
  3. public class Region {
  4.  
  5. private String nombre;
  6. private double area;
  7. private Region siguiente;
  8. private Coordenada miCoordenada;
  9.  
  10. public void setNombre(String nombre){
  11. this.nombre =nombre;
  12. }
  13.  
  14. public String getNombre(){
  15. return nombre;
  16. }
  17.  
  18. public void setArea(double area){
  19. this.area =area;
  20. }
  21.  
  22. public double getArea(){
  23. return area;
  24. }
  25.  
  26. public void setSiguiente(Region siguiente){
  27. this.siguiente =siguiente;
  28. }
  29.  
  30. public Region getSiguiente(){
  31. return siguiente;
  32. }
  33.  
  34. public void setCoordenada(int x, int y){
  35. miCoordenada = new Coordenada(x, y);
  36. }
  37.  
  38. public Coordenada getCoordenada(){
  39. return miCoordenada;
  40. }
  41. }
  42.  

Bueno lo unico que tiene esta clase son los metodos usuales setter y getters jeje, ahora miremos como esta la clase Colombia.java:

Código
  1. package mundo;
  2.  
  3. import javax.swing.JOptionPane;
  4.  
  5. public class Colombia {
  6.  
  7. Region primera;
  8. int cantidadRegiones;
  9.  
  10. public Colombia() {
  11. primera = null;
  12. cantidadRegiones =0;
  13. }
  14.  
  15. public void agregarRegion(String nombre, int x, int y, double area) {
  16.  
  17. if(buscarRegion(nombre) == null)
  18. {
  19. Region miRegion = new Region();
  20. miRegion.setNombre(nombre);
  21. miRegion.setArea(area);
  22. miRegion.setCoordenada(x, y);
  23. miRegion.setSiguiente(primera);
  24. primera = miRegion;
  25. }
  26. else
  27. JOptionPane.showMessageDialog(null, "Esta region ya fue ingresada");
  28. }
  29.  
  30. public Region buscarRegion(String nombre)
  31. {
  32. Region miRegion = primera;
  33. while(miRegion !=null)
  34. {
  35. if(miRegion.getNombre().equals(nombre))
  36. return miRegion;
  37. miRegion = miRegion.getSiguiente();
  38. }
  39. return null;
  40. }
  41.  
  42. public void inicializarColombia() {
  43.  
  44. agregarRegion("quindio", 10, 20, 230.54);
  45. agregarRegion("valle", 30, 11, 580.32);
  46. agregarRegion("barranquilla", 72, 10, 1520.14);
  47. agregarRegion("bogota", 55, 38, 14554.32);
  48. agregarRegion("pereira", 31, 48, 654.22);
  49. agregarRegion("a", 31, 48, 654.22);
  50. }
  51.  
  52.  
  53. public void invertirLista(){
  54.  
  55. Region miRegion = primera, temp=null;
  56.  
  57. while(miRegion.getSiguiente() != null)
  58. {
  59. temp = miRegion.getSiguiente();
  60. miRegion.setSiguiente(temp.getSiguiente());
  61. temp.setSiguiente(primera);
  62. primera = temp;
  63. }
  64. }
  65. }
  66.  

Bueno lo que tiene es un método agregarRegion el cual como ven primero busca en buscarRegion(String nombre) que no haya sido ingresada todavía, y si no esta ingresada la inserta creando una nueva Region y asignandole primera a su referencia siguiente, por lo tanto la primera que se ingrese tendra en siguiente una referencia a null, por ser la última, es decir primera que se ingresa es última que queda jeje.

Bueno, al inicializar la aplicación se llamara al método inicializarColombia() que lo que hace es tan solo agregar unas cuantas regiones, pero no es el caso mostrar la clase principal  :¬¬, ahora viene lo interesante y es el método invertirLista().

Lo que hacemos primeramente es declarar una Región (miRegion) y le apuntamos a Primera para poder empezar desde el inicio :P, y tambien declaramos una referencia (temp) que nos servira para el cambio de nodos.

Como bien, la lista es sencilla por lo tanto no tenemos referencia a Anterior, por eso debemos tener un auxiliar (temp)que nos sirva de rescate.

El bucle lo que hace es mientras no estemos en la ultima región "While(miRegion.getSiguiente() != null)" apuntamos temp hacia la siguiente de donde estamos parados, para que de esta forma al cambiar la referencia en la que estamos hacia la que sigue de la siguiente, en temp nos quede la que saltamos (ahora explico bien el mecanismo usado).

Con "miRegion.setSiguiente(temp.getSiguiente());" lo que hacemos es que donde estamos ponemos en siguiente la referencia siguiente del elemento que saltamos, de esta forma quedaria en la misma posición de temp.

Ahora "temp.setSiguiente(primera);" lo que hace es cambiar la referencia siguiente de temp para que apunte a la primera, y hecho esto ya pasamos nuestro elemento miRegion una posición mas en la lista, y con "primera = temp" indicamos que primera ya no es miRegion sino temp, el esquema siguiente ilustra lo que hace el bucle.


Esquema:

1. Inicio del escenario: Region miRegion = primera, temp=null;


2. Inicializamos temptemp = miRegion.getSiguiente();


3. Saltamos E2: miRegion.setSiguiente(temp.getSiguiente());


4. Apuntamos temp a primera: temp.setSiguiente(primera);


5. Tomamos ya primera como temp: primera = temp;


6. Ahora ordenamos el esquema para que se vea mejor:


Como ven esto se repite hasta que miRegion.getSiguiente() != null, eso indicaria que terminamos, ya que los elementos iran quedando uno detrás del otro y asi sucesivamente.

Espero les sirva de algo, cualquier duda comenten  :xD

salu2

amerikano


« Última modificación: 23 Noviembre 2008, 19:05 pm por AmeRiK@nO » En línea





Mi blog:
http://amerikanocls.blogspot.com
Amerikano|Cls


Desconectado Desconectado

Mensajes: 789


[Beyond This Life]


Ver Perfil WWW
Re: Tutorial invertir lista simple en java a travez de nodos by.AmeRiK@nO
« Respuesta #1 en: 24 Noviembre 2008, 04:23 am »

mmmmmmmm pocos comentarios, me parece trizte que lo vean mas de 11 veces y nadie se anime ni agradecer :( que mal, pero bueno.

salu2


En línea





Mi blog:
http://amerikanocls.blogspot.com
juancho77


Desconectado Desconectado

Mensajes: 455


rie con demencia


Ver Perfil
Re: Tutorial invertir lista simple en java a travez de nodos by.AmeRiK@nO
« Respuesta #2 en: 24 Noviembre 2008, 04:29 am »

jeje yo lo mire pero es lo mismo que vi en la universidad el cuatrimestre pasado. Igual esta muy bueno.  ;)
Saludos!
En línea

Amerikano|Cls


Desconectado Desconectado

Mensajes: 789


[Beyond This Life]


Ver Perfil WWW
Re: Tutorial invertir lista simple en java a travez de nodos by.AmeRiK@nO
« Respuesta #3 en: 24 Noviembre 2008, 04:49 am »

yo estoy en tercero y lo vimos hace poco, ahora estamos viendo arboles y herencia y terminamos semestre jeje  :rolleyes:

salu2
En línea





Mi blog:
http://amerikanocls.blogspot.com
sant0s

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Tutorial invertir lista simple en java a travez de nodos by.AmeRiK@nO
« Respuesta #4 en: 11 Diciembre 2011, 22:26 pm »

hola, come estas espero que bien.

interesante tu codigo de invertir lista.

si fueras tan amable de traducir el codigo al lenguaje delphi. te lo agradecería
o caso contrario una breve explicacion de lo que hacen estas dos lineas de codigo.

miRegion.setSiguiente(temp.getSiguiente());
temp.setSiguiente(primera);
En línea

[Case]


Desconectado Desconectado

Mensajes: 474



Ver Perfil WWW
Re: Tutorial invertir lista simple en java a travez de nodos by.AmeRiK@nO
« Respuesta #5 en: 11 Diciembre 2011, 23:06 pm »

yo estoy en tercero y lo vimos hace poco, ahora estamos viendo arboles y herencia y terminamos semestre jeje  :rolleyes:

salu2

Que estas estudiando?.
En línea

sant0s

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Tutorial invertir lista simple en java a travez de nodos by.AmeRiK@nO
« Respuesta #6 en: 12 Diciembre 2011, 03:10 am »

estudio informatica, si te refiers a que estructura: lista simple, lista doble, pilas, colas y conjunto.
gracias por  responder, espero puedas traducirlo al delphi solo la parte de invertir por lo demas yo me ago cargo.
Gracias de Antemano.
En línea

Defeat_Col

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: Tutorial invertir lista simple en java a travez de nodos by.AmeRiK@nO
« Respuesta #7 en: 10 Marzo 2022, 01:03 am »

Hola te hablo varios años después que publicaste este post , cree una cuenta para agradecerte por ayudarme a entender como hiciste el método invertir cadena  :rolleyes: ya que estaba un poco perdido por donde empezar . Lo mas importante es que indicaste el paso a paso de como lo realizaste y no solo pusiste el código . Gracias por haber dedicado tu tiempo en este post . espero que lo leas  ;D  ME AYUDASTE DEMASIADO !
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

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