public void eliminar(string x, string y, int nivel) { NodoM nodo = obtenerNodo(x, y); if (nodo != null) { if (nodo.getZ() == nivel) { eliminarPrincipal(nodo); } else { NodoM aux = obtenerNivel(nodo, nivel); if (aux != null) { if (aux.atras != null) { aux.atras.adelante = aux.adelante; } if (aux.adelante != null) { aux.adelante.atras = aux.atras; } } } } }
//ESTE MÉTODO RECIBE UN NODO, Y DEVUELVE EL NODO EN EL NIVEL ESPECIFICADO, SI ESTE EXISTE, SINO, RETORNA NULL. public NodoM obtenerNivel(NodoM nodo, int nivel) { if (nodo != null) { if (nodo.getZ() == 0) { if (nivel == 0) { return(nodo); } else if (nivel == 1) { return(nodo.adelante); } else if (nivel == 2) { NodoM aux = nodo; while (aux != null) { if (aux.getZ() == nivel) { return(aux); } aux = aux.adelante; } } else if (nivel == 3) { NodoM aux = nodo; while (aux != null) { if (aux.getZ() == nivel) { return(aux); } aux = aux.adelante; } } } else if (nodo.getZ() == 1) { if (nivel == 0) { return(nodo.atras); } else if (nivel == 1) { return(nodo); } else if (nivel == 2) { if (nodo.adelante != null) { if (nodo.adelante.getZ() == 2) { return(nodo.adelante); } } } else if (nivel == 3) { NodoM aux = nodo; while (aux != null) { if (aux.getZ() == nivel) { return(aux); } aux = aux.adelante; } } } else if (nodo.getZ() == 2) { if (nivel == 0) { NodoM aux = nodo; while (aux != null) { if (aux.getZ() == nivel) { return(aux); } aux = aux.atras; } } else if (nivel == 1) { return(nodo.atras); } else if (nivel == 2) { return(nodo); } else if (nivel == 3) { return(nodo.adelante); } } else if (nodo.getZ() == 3) { if (nivel == 0) { NodoM aux = nodo; while (aux != null) { if (aux.getZ() == nivel) { return(aux); } aux = aux.atras; } } else if (nivel == 1) { NodoM aux = nodo; while (aux != null) { if (aux.getZ() == nivel) { return(aux); } aux = aux.atras; } } else if (nivel == 2) { return(nodo.atras); } else if (nivel == 3) { return(nodo); } } } return(null); }
//Método en el que se agrega un nodo a una posición donde ya existía un nodo. //Funciona evaluando todas las combinaciones, para los valores del nodo actual 0,1,2,3 //y el nodo nuevo 0,1,2,3 public bool agregarANodo(NodoM nodo, NodoM nuevo) { if (nodo.getZ() == 0) { if (nuevo.getZ() == 1) { if (nodo.adelante == null) { nodo.adelante = nuevo; nuevo.atras = nodo; colocarApuntadores(nodo, nuevo); tamaño++; } else if (nodo.adelante.getZ() != 1) { nuevo.adelante = nodo.adelante; nuevo.atras = nodo; nodo.adelante.atras = nuevo; nodo.adelante = nuevo; colocarApuntadores(nodo, nuevo); tamaño++; } return(true); } else if (nuevo.getZ() == 2) { if (nodo.adelante == null) { nodo.adelante = nuevo; nuevo.atras = nodo; tamaño++; } else if (nodo.adelante.getZ() == 3) { nuevo.adelante = nodo.adelante; nuevo.atras = nodo; nodo.adelante.atras = nuevo; nodo.adelante = nuevo; tamaño++; } return(true); } else if (nuevo.getZ() == 3) { if (nodo.adelante == null) { nodo.adelante = nuevo; nuevo.atras = nodo; tamaño++; } else if (nodo.adelante.getZ() == 2) { nodo.adelante.adelante = nuevo; nuevo.atras = nodo.adelante; tamaño++; } return(true); } } else if (nodo.getZ() == 1) { if (nuevo.getZ() == 0) { if (nodo.atras == null) { nodo.atras = nuevo; nuevo.adelante = nodo; tamaño++; return(true); } } else if (nuevo.getZ() == 2) { if (nodo.adelante == null) { nodo.adelante = nuevo; nuevo.atras = nodo; tamaño++; return(true); } else if (nodo.adelante.getZ() == 3) { nuevo.adelante = nodo.adelante; nuevo.atras = nodo; nodo.adelante.atras = nuevo; nodo.adelante = nuevo; tamaño++; return(true); } } else if (nuevo.getZ() == 3) { if (nodo.adelante == null) { nodo.adelante = nuevo; nuevo.atras = nodo; tamaño++; return(true); } else if (nodo.adelante.getZ() == 2) { if (nodo.adelante.adelante == null) { nodo.adelante.adelante = nuevo; nuevo.atras = nodo.adelante; tamaño++; return(true); } } } } else if (nodo.getZ() == 2) { if (nuevo.getZ() == 0) { if (nodo.atras == null) { nodo.atras = nuevo; nuevo.adelante = nodo; tamaño++; return(true); } } else if (nuevo.getZ() == 1) { if (nodo.atras == null) { nodo.atras = nuevo; nuevo.adelante = nodo; colocarApuntadores(nodo, nuevo); tamaño++; return(true); } else if (nodo.atras.getZ() == 0) { nuevo.adelante = nodo; nuevo.atras = nodo.atras; nodo.atras.adelante = nuevo; nodo.atras = nuevo; colocarApuntadores(nodo, nuevo); tamaño++; return(true); } } else if (nuevo.getZ() == 3) { if (nodo.adelante == null) { nodo.adelante = nuevo; nuevo.atras = nodo; tamaño++; return(true); } } } else if (nodo.getZ() == 3) { if (nuevo.getZ() == 0) { if (nodo.atras == null) { nodo.atras = nuevo; nuevo.adelante = nodo; tamaño++; return(true); } else if (nodo.atras.getZ() == 2) { if (nodo.atras.atras == null) { nodo.atras.atras = nuevo; nuevo.adelante = nodo.atras; tamaño++; return(true); } } } else if (nuevo.getZ() == 1) { if (nodo.atras == null) { nodo.atras = nuevo; nuevo.adelante = nodo; colocarApuntadores(nodo, nuevo); tamaño++; return(true); } else if (nodo.atras.getZ() == 2) { if (nodo.atras.atras == null) { nodo.atras.atras = nuevo; nuevo.adelante = nodo.atras; colocarApuntadores(nodo, nuevo); tamaño++; return(true); } else if (nodo.atras.atras.getZ() == 0) { nuevo.adelante = nodo.atras; nuevo.atras = nodo.atras.atras; nodo.atras.atras.adelante = nuevo; nodo.atras.atras = nuevo; colocarApuntadores(nodo, nuevo); tamaño++; return(true); } } } else if (nuevo.getZ() == 2) { if (nodo.atras == null) { nodo.atras = nuevo; nuevo.adelante = nodo; tamaño++; return(true); } else if (nodo.atras.getZ() == 0) { nuevo.atras = nodo.atras; nuevo.adelante = nodo; nodo.atras.adelante = nuevo; nodo.atras = nuevo; tamaño++; return(true); } } } return(false); }
public void eliminarPrincipal(NodoM nodo) { if (nodo != null) { if (nodo.getZ() == 0) { if (obtenerNivel(nodo, 1) != null) { NodoM aux = obtenerNivel(nodo, 1); aux.atras = null; colocarApuntadores(nodo, aux); } else if (obtenerNivel(nodo, 2) != null) { NodoM aux = obtenerNivel(nodo, 2); aux.atras = null; colocarApuntadores(nodo, aux); } else if (obtenerNivel(nodo, 3) != null) { NodoM aux = obtenerNivel(nodo, 3); aux.atras = null; colocarApuntadores(nodo, aux); } else { if (nodo.arriba != null) { nodo.arriba.abajo = nodo.abajo; } if (nodo.abajo != null) { nodo.abajo.arriba = nodo.arriba; } if (nodo.derecha != null) { nodo.derecha.izquierda = nodo.izquierda; } if (nodo.izquierda != null) { nodo.izquierda.derecha = nodo.derecha; } NodoM encabezadoH = listaHorizontal.buscar(nodo.y); if (encabezadoEsVacioH(encabezadoH)) { listaHorizontal.eliminar(nodo.y); } NodoM encabezadoV = listaVertical.buscar(nodo.x); if (encabezadoEsVacioV(encabezadoV)) { listaVertical.eliminar(nodo.x); } } } else if (nodo.getZ() == 1) { if (obtenerNivel(nodo, 0) != null) { NodoM aux = obtenerNivel(nodo, 0); aux.adelante = nodo.adelante; colocarApuntadores(nodo, aux); } else if (obtenerNivel(nodo, 2) != null) { NodoM aux = obtenerNivel(nodo, 2); aux.atras = null; colocarApuntadores(nodo, aux); } else if (obtenerNivel(nodo, 3) != null) { NodoM aux = obtenerNivel(nodo, 3); aux.atras = null; colocarApuntadores(nodo, aux); } else { if (nodo.arriba != null) { nodo.arriba.abajo = nodo.abajo; } if (nodo.abajo != null) { nodo.abajo.arriba = nodo.arriba; } if (nodo.derecha != null) { nodo.derecha.izquierda = nodo.izquierda; } if (nodo.izquierda != null) { nodo.izquierda.derecha = nodo.derecha; } NodoM encabezadoH = listaHorizontal.buscar(nodo.y); if (encabezadoEsVacioH(encabezadoH)) { listaHorizontal.eliminar(nodo.y); } NodoM encabezadoV = listaVertical.buscar(nodo.x); if (encabezadoEsVacioV(encabezadoV)) { listaVertical.eliminar(nodo.x); } } } else if (nodo.getZ() == 2) { if (obtenerNivel(nodo, 1) != null) { NodoM aux = obtenerNivel(nodo, 1); aux.adelante = nodo.adelante; colocarApuntadores(nodo, aux); } else if (obtenerNivel(nodo, 0) != null) { NodoM aux = obtenerNivel(nodo, 0); aux.adelante = nodo.adelante; colocarApuntadores(nodo, aux); } else if (obtenerNivel(nodo, 3) != null) { NodoM aux = obtenerNivel(nodo, 3); aux.atras = null; colocarApuntadores(nodo, aux); } else { if (nodo.arriba != null) { nodo.arriba.abajo = nodo.abajo; } if (nodo.abajo != null) { nodo.abajo.arriba = nodo.arriba; } if (nodo.derecha != null) { nodo.derecha.izquierda = nodo.izquierda; } if (nodo.izquierda != null) { nodo.izquierda.derecha = nodo.derecha; } NodoM encabezadoH = listaHorizontal.buscar(nodo.y); if (encabezadoEsVacioH(encabezadoH)) { listaHorizontal.eliminar(nodo.y); } NodoM encabezadoV = listaVertical.buscar(nodo.x); if (encabezadoEsVacioV(encabezadoV)) { listaVertical.eliminar(nodo.x); } } } else if (nodo.getZ() == 3) { if (obtenerNivel(nodo, 2) != null) { NodoM aux = obtenerNivel(nodo, 2); aux.adelante = null; colocarApuntadores(nodo, aux); } else if (obtenerNivel(nodo, 1) != null) { NodoM aux = obtenerNivel(nodo, 1); aux.adelante = null; colocarApuntadores(nodo, aux); } else if (obtenerNivel(nodo, 0) != null) { NodoM aux = obtenerNivel(nodo, 0); aux.adelante = null; colocarApuntadores(nodo, aux); } else { if (nodo.arriba != null) { nodo.arriba.abajo = nodo.abajo; } if (nodo.abajo != null) { nodo.abajo.arriba = nodo.arriba; } if (nodo.derecha != null) { nodo.derecha.izquierda = nodo.izquierda; } if (nodo.izquierda != null) { nodo.izquierda.derecha = nodo.derecha; } NodoM encabezadoH = listaHorizontal.buscar(nodo.y); if (encabezadoEsVacioH(encabezadoH)) { listaHorizontal.eliminar(nodo.y); } NodoM encabezadoV = listaVertical.buscar(nodo.x); if (encabezadoEsVacioV(encabezadoV)) { listaVertical.eliminar(nodo.x); } } } } }