una remove recorrer nodo metodos metodo listas lista linkedlist imprimir eliminar ejemplos como buscar java data-structures linked-list

remove - metodos linkedlist java



LinkedList eliminar método (6)

¿Estás preguntando por el nombre de un método en la API? Esa respuesta simplemente se eliminaría, asumiendo que está preguntando acerca de java.util.LinkedList, que de hecho es una lista de doble enlace.

... o ¿está preguntando sobre el nombre del algoritmo para eliminar un elemento de ese tipo de estructura de datos? Bueno ... la respuesta para eso también sería eliminar un elemento. Ahora, para que el algoritmo real lo haga ... es solo cuestión de cambiar el siguiente puntero en el nodo anterior y el último puntero en el siguiente nodo. Sin embargo, si está utilizando su estructura de datos desde varios hilos, necesitará sincronizar el método de eliminación o realizar los pasos de extracción en un orden que tenga sentido para su patrón de uso de la estructura de datos.

¿Cuál es el método de eliminación de una lista doblemente vinculada?


El algoritmo general es el siguiente:

  • Encuentra el nodo para eliminar.
  • node.previous.next = node.next
  • node.next.previous = node.previous
  • node.previous = null
  • node.next = null
  • Deseche el nodo si se encuentra en un entorno sin GC

Debes verificar los nódulos anteriores y siguientes para ver si estás eliminando la cabeza o la cola, pero esos son los casos fáciles.



Implementación de listas dobles vinculadas Eliminar métodos (de mi segunda asignación de programación):

public void remove(int index) { if(index<0 || index>size()) throw new IndexOutOfBoundsException("Index out of bounds. Can''t remove a node. No node exists at the specified index"); if(size()==0) { throw new NullPointerException("Empty list"); } if(!isEmpty()) { Node current; //starting next one to our head current = head.next; for(int i=0;i<index;i++) { current = current.next; } current.previous.next = current.next; current.next.previous = current.previous; numOfNodes--; sizeChangeCount++; } } public boolean remove(T o) { Node current = head; for(int i=0;i<size();i++) { current=current.next; if(current.data.equals(o)) { current.previous.next = current.next; current.next.previous = current.previous; numOfNodes--; sizeChangeCount++; return true; } } return false; }


public void remove () { if (getPreviousNode () != null) getPreviousNode ().setNextNode (getNextNode ()); if (getNextNode () != null) getNextNode ().setPreviousNode (getPreviousNode ()); }