Hola, la cuestión planteada es muy amplia y muy compleja como para poder resolverla en un foro. Podríamos intentar responder alguna cuestión concreta pero lo planteado es demasiado amplio.
Referencia de cómo se codifica una lista doblemente enlazada en java (esto habría que trabajarlo para adaptarlo):
Nodo principal
public class NodoDoble {
private Integer dato;
private NodoDoble siguiente;
private NodoDoble anterior;
}
Método Insertar inicio
public void insertarInicio(Integer d){
NodoDoble nuevo = new NodoDoble(d);
if(inicio==null){
inicio=nuevo;
}else{
nuevo.setSiguiente(inicio);
inicio.setAnterior(nuevo);
inicio=nuevo;
}
}
Método Insertar final
public void insertarFinal(Integer d){
NodoDoble nuevo = new NodoDoble(d);
if(inicio == null){
inicio = nuevo;
}else{
NodoDoble aux = inicio;
while(aux.getSiguiente() != null){
aux = aux.getSiguiente();
}
aux.setSiguiente(nuevo);
nuevo.setAnterior(aux);
}
}
Metodo Eliminar
public void eliminaValor(Integer valor){
if (inicio != null){
NodoDoble aux = inicio;
NodoDoble ant = null;
while (aux != null){
if (aux.getDato() == valor ){
if (ant == null){
inicio = inicio.getSiguiente();
aux.setSiguiente(null);
aux= inicio;
}else {
ant.setSiguiente(aux.getSiguiente());
aux.setSiguiente(null);
aux = ant.getSiguiente();
}
}else{
ant = aux;
aux = aux.getSiguiente();
}
}
}
}
Método buscar
public void buscar(Integer valor){
if (inicio != null){
NodoDoble aux = inicio;
int cont = 0;
while (aux != null){
if (aux.getDato() == valor ){
cont++;
aux = aux.getSiguiente();
}
}
}
}
Salu2