Java - Cola doblemente enlazada

 
Vista:

Cola doblemente enlazada

Publicado por Tram (1 intervención) el 18/01/2007 22:30:05
Hola a todos
tengo este codigo de una Cola doblemente enlazada. Hay algun error pero no soy capaz de verlo, a ver si alguien puede ayudarme...
El problema es:
tengo por ejemplo 3 elementos "A", "B" y "C"
borro el ultimo, "C"
inserto uno nuevo,"D"
Pues al insertar despues de borrar el ultimo, nunca aparece



public class Cola{
protected Nodo cab; //inicio de la Cola
protected Nodo actual; //referencia
protected Nodo fin;
protected int numElem;

public Cola() {
cab = actual = null;
this.numElem = 0;
}

public int getNumElementos() {
return this.numElem;
}

public boolean estaVacia() {
return cab == null;
}

private void insertarEnCabeza(Object o) {
Nodo nuevo = new Nodo(o);
nuevo.sig = cab;

if (cab==null) {
fin = nuevo;
}
cab = nuevo;
this.numElem++;
}

public void insertarAlFinal (Object o) {
if (this.estaVacia()) {
this.insertarEnCabeza(o);
return;
}

// Si el actual es el ultimo, insertar detras de actual
Nodo nuevo = new Nodo (o);
fin.sig = nuevo;
fin = nuevo;
this.numElem++;

}

public void inicio() {
actual = cab;
}

public boolean esFin() {
return actual == null;
}

public void avanzar() {
if (actual != null) {
actual = actual.sig;
}
}

public Object getActual() {
if (actual == null) {
return null;
}
else {
return actual.info;
}
}

public void irAlUltimo() {
this.actual = this.fin;
}

public String toString() {
String t = "";
inicio();
while (!esFin()) {
t += actual.info + "\n";
avanzar();
}
return t;
}

public void recorrer() {
System.out.println(toString());
}

public Object buscar(Object o) {
inicio();

while (!esFin() && !o.equals(getActual())) {
avanzar();
}

if (esFin()) {
return null;
}
else {
return getActual();
}
}

public void borrar(Object o) {
// Esta vacia, no se puede borrar nada, salir
if (estaVacia()) {
return;
}

// Hay un elemento, avanzar cabeza y salir
if (cab.info.equals(o)) {
cab = cab.sig;
this.numElem--;
return;
}

// La Cola no esta vacia, y el que hay que borrar es al menos el segundo
Nodo p = cab;
Nodo q = null;
while (p != null && !p.info.equals(o)) {
q = p;
p = p.sig;
}

if (p != null) {
Nodo r = p.sig;

q.sig = r;

this.numElem--;
}

}

public void borrarActual () {
// Si esta vacia o no hay actual, salir
if (this.estaVacia() || this.esFin()) {
return;
}

if (this.actual==this.cab) {
this.cab = this.cab.sig;
this.actual = this.cab; // mover iterador (para que no quede apuntando al elemento borrado)
this.numElem--;
return;
}

Nodo p = cab;
while (p.sig!=actual) {
p = p.sig;
}
Nodo r = actual.sig;
p.sig = r;
this.actual = r;
this.numElem--;

}

}
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