Ordenar e invertir listas ligadas
Publicado por Diamante Loco (1 intervención) el 14/07/2009 14:50:01
Hola buenas tardes/noches
ps mi duda es la siguiente:
Tengo este programa de Listas Doblemente Ligadas
Inserta e elimina nodos
imprime la lista de izquierda a derecha.
lo q quiero que tmb haga es ordenar la lista
por ejemplo si esta es la lista:
4 5 1 0 8
q la ordene d menor a mayor:
0 1 4 5 8
pero no tengo mucha idea d como hacerloo
la otra duda es que invierta la lista
por ejemplo si esta es la lista:
4 5 1 0 8
al momento de invertir la lista quedaria asi:
8 0 1 5 4
pero tampoco me salee Confused
Les pongo el codigo que tengo :
espero q me puedan ayudar!
Código:
import java.io.*;
class Nodo
{
public int info;
public Nodo sig, ant;
public Nodo(int x)
{
info = x;
sig = ant = null;
}
}
class ListaDoblementeLigada
{
private Nodo inicio, fin;
public ListaDoblementeLigada()
{
inicio = fin = null;
}
public void inserta(int x)
{
Nodo temp = new Nodo(x);
if(inicio == null && fin == null)
inicio = fin = temp;
else
{
temp.ant = fin;
fin.sig = temp;
fin = temp;
}
}
public void recorreIzq()
{
Nodo aux;
aux = inicio;
while(aux != null)
{
System.out.print(aux.info + " ");
aux = aux.sig;
}
}
public void elimina()
{
Nodo aux, aux2;
aux = aux2 = fin;
fin = fin.ant;
aux2 = fin;
System.out.println("Dato eliminado: " + aux.info);
aux2.sig = null;
aux.ant = null;
}
public void menu()
{
System.out.println("");
System.out.println("Menu");
System.out.println("1.- Insertar");
System.out.println("2.- Recorrer de Izquierda a Derecha");
System.out.println("3.- Invertir lista");
System.out.println("4.- Eliminar");
System.out.println("5.- Salir");
System.out.print("Opcion: ");
}
public static void main(String a[])throws IOException
{
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader entrada = new BufferedReader(isr);
int cantidad, opc, dato;
ListaDoblementeLigada L1 = new ListaDoblementeLigada();
do
{
L1.menu();
opc = Integer.parseInt(entrada.readLine());
if (opc == 1)
{
System.out.print("Cantidad de nodos de la lista 1: ");
cantidad = Integer.parseInt(entrada.readLine());
for(int i = 1; i <= cantidad; i++)
{
System.out.print("Da el dato "+ i + ": ");
dato = Integer.parseInt(entrada.readLine());
L1.inserta(dato);
}
}
if(opc == 2)L1.recorreIzq();
if(opc == 4)L1.elimina();
}while(opc != 5) ;
}
}
ps mi duda es la siguiente:
Tengo este programa de Listas Doblemente Ligadas
Inserta e elimina nodos
imprime la lista de izquierda a derecha.
lo q quiero que tmb haga es ordenar la lista
por ejemplo si esta es la lista:
4 5 1 0 8
q la ordene d menor a mayor:
0 1 4 5 8
pero no tengo mucha idea d como hacerloo
la otra duda es que invierta la lista
por ejemplo si esta es la lista:
4 5 1 0 8
al momento de invertir la lista quedaria asi:
8 0 1 5 4
pero tampoco me salee Confused
Les pongo el codigo que tengo :
espero q me puedan ayudar!
Código:
import java.io.*;
class Nodo
{
public int info;
public Nodo sig, ant;
public Nodo(int x)
{
info = x;
sig = ant = null;
}
}
class ListaDoblementeLigada
{
private Nodo inicio, fin;
public ListaDoblementeLigada()
{
inicio = fin = null;
}
public void inserta(int x)
{
Nodo temp = new Nodo(x);
if(inicio == null && fin == null)
inicio = fin = temp;
else
{
temp.ant = fin;
fin.sig = temp;
fin = temp;
}
}
public void recorreIzq()
{
Nodo aux;
aux = inicio;
while(aux != null)
{
System.out.print(aux.info + " ");
aux = aux.sig;
}
}
public void elimina()
{
Nodo aux, aux2;
aux = aux2 = fin;
fin = fin.ant;
aux2 = fin;
System.out.println("Dato eliminado: " + aux.info);
aux2.sig = null;
aux.ant = null;
}
public void menu()
{
System.out.println("");
System.out.println("Menu");
System.out.println("1.- Insertar");
System.out.println("2.- Recorrer de Izquierda a Derecha");
System.out.println("3.- Invertir lista");
System.out.println("4.- Eliminar");
System.out.println("5.- Salir");
System.out.print("Opcion: ");
}
public static void main(String a[])throws IOException
{
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader entrada = new BufferedReader(isr);
int cantidad, opc, dato;
ListaDoblementeLigada L1 = new ListaDoblementeLigada();
do
{
L1.menu();
opc = Integer.parseInt(entrada.readLine());
if (opc == 1)
{
System.out.print("Cantidad de nodos de la lista 1: ");
cantidad = Integer.parseInt(entrada.readLine());
for(int i = 1; i <= cantidad; i++)
{
System.out.print("Da el dato "+ i + ": ");
dato = Integer.parseInt(entrada.readLine());
L1.inserta(dato);
}
}
if(opc == 2)L1.recorreIzq();
if(opc == 4)L1.elimina();
}while(opc != 5) ;
}
}
Valora esta pregunta


0