Enunciado:
Crear una lista simple enlazada de números enteros, se desea añadir un nodo entre dos nodos consecutivos; el dato del nuevo nodo debe ser la diferencia en valor absoluto de los dos nodos.
Ejemplo: si tengo la siguiente lista:
|
20 | | 43 | |
17 | | 4 |
| 11 |
Se debe insertar un dato entre 43 y 17
Reviso que exista secuencia
Luego calculo el valor absoluto de (43-17)
Inserto entre esos elementos.
|
20 | | 43 | |
26 | | 17 | |
4 | | 11 |
Para realizar este ejercicio es necesario tener en cuenta, al igual que en el anterior, las definiciones sobre listas simples enlazadas, así mismo de busquedas para encontrar el número que sirva como referencia para calcular el valor absoluto y el método correcto para insertar un nodo entre dos nodos. Se utiliza la libreria JOptionPane para establecer un mensaje emergente.
A continuación se muestra el código:
Clase Nodo:
public class Nodo { //Declaración de atributos private int dato; private Nodo siguiente; //Constructor Nodo null public Nodo(int dato) { this.dato=dato; this.siguiente=null; } //Constructor Nodo con parametro public Nodo(int dato, Nodo siguiente) { this.dato=dato; this.siguiente=siguiente; } //Metodos getters and setters public int getDato() { return dato; } public void setDato(int dato) { this.dato = dato; } public Nodo getSiguiente() { return siguiente; } public void setSiguiente(Nodo siguiente) { this.siguiente = siguiente; } }Clase Lista:
public class Lista { private Nodo inicio; private Nodo fin; public Lista() { inicio=fin=null; } //Metodo para agregar inicio public void agregarInicio(int info) { Nodo nuevo=new Nodo(info, inicio); if(inicio==null) { inicio=fin=nuevo; } inicio=nuevo; } //Metodo para agregar fin public void agregarFin(int info) { Nodo nuevo=new Nodo(info, null); if(inicio==null) { inicio=fin=nuevo; } else { fin.setSiguiente(nuevo); fin=nuevo; } } //Metodo para imprimir public void imprimir() { Nodo aux=inicio; while(aux!=null) { System.out.println(aux.getDato()); aux=aux.getSiguiente(); } } //Metodo para eliminar el nodo public void eliminarNodo(int numero) { if(inicio!=null) { if((inicio==fin)&&(inicio.getDato()==numero)) { inicio=fin=null; } else if(inicio.getDato()==numero) { inicio=inicio.getSiguiente(); } else { Nodo anterior=inicio; Nodo siguiente=inicio.getSiguiente(); while((siguiente!=null)&&(siguiente.getDato()!=numero)) { anterior=siguiente; siguiente=siguiente.getSiguiente(); } if(siguiente!=null) { anterior.setSiguiente(siguiente.getSiguiente()); if(siguiente==fin) { fin=anterior; } } } } } //Metodo para agregar un nodo public void agregarNodo(int numero) { if(inicio!=null) { if(inicio==fin && inicio.getDato()==numero) { inicio=fin=null; } else if(inicio.getDato()==numero) { inicio = inicio.getSiguiente(); } else { Nodo anterior = inicio; Nodo siguiente = inicio.getSiguiente(); while(siguiente!=null && anterior.getDato()!=numero) { anterior = siguiente; siguiente = siguiente.getSiguiente(); } if (siguiente!=null) { Nodo nuevo = new Nodo(calculo(anterior.getDato(),siguiente.getDato()),siguiente); anterior.setSiguiente(nuevo); nuevo.setSiguiente(siguiente); if(siguiente == fin) { fin = anterior; } } } } } //Metodo para calcular el valor absoluto entre dos numeros ubicados en los nodos public int calculo(int primer, int segundo) { int num = primer -segundo; num =Math.abs(num); return num; } }Clase Principal:
import javax.swing.JOptionPane; public class Principal { public static void main(String[] args) { Lista array = new Lista(); array.agregarInicio(17); array.agregarInicio(43); array.agregarInicio(20); array.agregarFin(4); array.agregarFin(11); System.out.println("Lista inicial"); array.imprimir(); int agregar = Integer.parseInt(JOptionPane.showInputDialog("Ingrese el numero para que el nuevo valor se ubique despues de este")); array.agregarNodo(agregar); System.out.println("Nueva lista:"); array.imprimir(); } }
Capturas de pantalla del programa:
gracias
ResponderEliminar