Descargar
Escribir un método que reciba como parámetro una lista y realiza el entrelazado de las mismas.
public void cruzaRec(LinearNode<T> l1,
LinearNode<T >l2) { if
((l1!=null) && (l2!=null))
{
LinearNode<T>
aux=l1.getNext(); l1.setNext(l2.getNext()); l2.setNext(aux);
cruzaRec(l1.getNext(),l2.getNext());
}
}
public void cruza(LinkedOrderList<T> other){
LinearNode<T>
l1=this.head; LinearNode<T> l2=other.head; cruzaRec(l1,l2);
}
|
Escribir una función recursiva que examine una lista encadenada y calcule el número de claves que están entre dos valores pasados como parámetro.
private int
NElemBetweenRec(LinearNode<T> list, T min, T max){ if (list==null){
return 0;
} else {
if ((list.getElem().compareTo(min)>=0)
&&
(list.getElem().compareTo(max)<=0)){
return
1 + NElemBetweenRec(list.getNext(),min,max);
}
else
if (list.getElem().compareTo(max)<=0)
return
NElemBetweenRec(list.getNext(),min,max);
else return 0;
}
}
public int NElemBetween(T min, T max){
return
NElemBetweenRec(head,min,max);
}
|
Escribir el método divide(), cuya cabecera se indica más abajo, y que parte una lista por la mitad. La primera mitad contendrá los elementos del 0 al (contador/2) (división entera, siendo contador el número de elementos de la lista) y se quedará en el objeto actual. La 2ª mitad contendrá el resto de los elementos y será retornada como una nueva lista por el método.
public
ListADT<T> divide() {
int
mitad=((contador)/2);
int
cont=0;
LinearNode<T>
aux=head;
LinearNode<T>
otraMitad=null;
while (cont<mitad-1){
aux=aux.getNext(); cont=cont+1;
}
//aux es una referencia al
último nodo de la primera mitad
otraMitad=aux.getNext(); aux.setNext(null);
ListADT<T>
nuevaLista=new LinkedOrderList<T>(otraMitad, contador-mitad);
return
nuevaLista;
}
|