1. Crear una
lista simple enlazada de número 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 dese insertar un dato entre 43 y
17.
Reviso que exista la secuencia
Luego calculo el valor absoluto de
(43-17)
Inserto entre esos elementos.
| 20
| | 43 | | 26
| | 17 | | 4
| | 11 |
Para el ejercicio propuesto se tiene que analizar que se debe tener un método
en especial que realiza la resta y el valor absoluto de ambos números, como también
la inserción de este nuevo digito en medio de los dos. Para esto debemos hacer
uso del usuario el cual de como referencia el inicio del número a ser restado
por el siguiente, por lo que se le pedirá al usuario el ingreso del número. De esta
manera fácilmente realizamos los requerimientos planteados.
Main:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner leer=new Scanner(System.in); Lista arreglo = new Lista(); arreglo.agregarInicio(17); arreglo.agregarFin(4); arreglo.agregarFin(1); arreglo.agregarFin(6); arreglo.agregarFin(8); System.out.println("\nLista Ingresada "); arreglo.imprimir(); System.out.println("\nIngrese el numero de referencia de inicio para insertar el nuevo valor: "); int numero; numero=leer.nextInt(); arreglo.insertarValorAbsoluto(numero); System.out.println("\nLista Ingresada modificada "); arreglo.imprimir(); } }
Lista:
public class Lista { private Nodo inicio; private Nodo fin; public Lista() { inicio=fin=null; } public void agregarInicio(int info) { Nodo nuevo = new Nodo(info,inicio); if(inicio==null) { inicio=fin=nuevo; } inicio=nuevo; } public void agregarFin(int info) { Nodo nuevo=new Nodo(info, null); if (inicio==null) { inicio=fin=nuevo; } else { fin.setSiguiente(nuevo); fin=nuevo; } } public void imprimir() { Nodo aux=inicio; while(aux!=null) { System.out.println(aux.getDato()); aux=aux.getSiguiente(); } } public void eliminarNodo(int info) { if(inicio!=null) { if(inicio==fin&&inicio.getDato()==info) { inicio=fin=null; } else { if(inicio.getDato()==info) { inicio=inicio.getSiguiente(); } else { Nodo anterior=inicio; Nodo siguiente=inicio.getSiguiente(); while(siguiente!=null&&siguiente.getDato()!=info) { anterior=siguiente; siguiente=siguiente.getSiguiente(); } if(siguiente!=null) { anterior.setSiguiente(siguiente.getSiguiente()); if(siguiente==fin) { fin=anterior; } } } } } } public int[] obtenerDato() { Nodo recorre = inicio; int dato[]=new int [6]; for(int i=0;i<dato.length;i++) { dato[i] = recorre.getDato(); recorre = recorre.getSiguiente(); } return dato; } public void insertarValorAbsoluto (int buscar) { Nodo aux=inicio; while (aux!=null) { if(aux.getDato()==buscar) { insertar(aux,aux.getSiguiente()); return; } aux=aux.getSiguiente(); } } public void insertar (Nodo aux, Nodo aux2) { Nodo nuevo=new Nodo(Math.abs(aux.getDato()-aux2.getDato())); aux.setSiguiente(nuevo); nuevo.setSiguiente(aux2); } }
Nodo:
Ejecucion en consola:
public class Nodo { private int dato; private Nodo siguiente; public Nodo (int dato) { this.dato=dato; this.siguiente=null; } public Nodo (int dato, Nodo siguiente) { this.dato=dato; this.siguiente=siguiente; } 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; } }
Ejecucion en consola:
No hay comentarios:
Publicar un comentario