java - revés - realiza un programa que nos diga cuántos dígitos tiene un número introducido por teclado.
Lista de utilidades de Java: ¿cómo encontrarla a continuación? (6)
La mejor solución: cree sus propios enlaces siguientes y últimos cuando construya un nuevo objeto de elemento de lista:
Solo tiene un objeto LastInserted en algún lugar más globalmente
public MyLinkedListItem(){
if(lastInserted != null){
lastInserted.next = this;
this.last = lastInserted;
}
lastInserted = this;
}
Cuando se utiliza la lista LinkedList Java, ¿cómo averigua las relaciones siguientes o anteriores del elemento?
Quiero decir, en una lista enlazada regular haría algo como esto:
Node node1 = new Node();
Node node2 = new Node();
LinkedList list = new LinkedList();
list.add(node1);
list.add(node2);
//then my node1 will know who it''s next is:
assertEquals(node2, node1.next());
donde Nodo es mi propio contenedor para datos / objeto.
Pero en LinkedList de Java, los datos no parecen ser modificados. Entonces, ¿cómo puedo saber quién es el elemento "siguiente" (o "anterior" en el caso de listas con enlaces dobles)?
La parte "vinculada" del nombre de la clase LinkedList solo se refiere a su implementación. La interfaz no expone métodos explícitos para hacer lo que quieres.
LinkedList implementa la interfaz de Colección (y Lista), por lo que, dado el índice i
de un elemento en la lista, puede obtener elementos anteriores y siguientes con list.get(i-1)
y list.get(i+1)
, respectivamente . Para una lista enlazada, la implementación de estos métodos es bastante lenta. Si realiza una gran cantidad de operaciones prev / next, considere implementar su lista o usar un ArrayList en su lugar.
No sé qué clase de Node
está usando, pero LinkedList<T>
tiene su propia clase de nodo interno, a la que no tiene acceso. Al add
a add
se agregará un valor a la lista; no puede insertar explícitamente un nodo que tenga un valor, ni acceder a los nodos de otra manera. Sí, eso puede ser un dolor a veces.
Si también necesita una lista vinculada con una encapsulación pública del nodo, deberá encontrar una implementación diferente o rodar la suya propia.
Puede usar un iterador para moverse a través de los nodos como:
Node node1 = new Node();
Node node2 = new Node();
LinkedList list = new LinkedList();
list.add(node1);
list.add(node2);
Iterator <Node> m_iterator=list.iterator();
//set iterator to first node
m_iterator.next();
//then my node1 will know who it''s next is:
assertEquals(node2, m_iterator.next());
Tengo que estar en desacuerdo con la respuesta aceptada. Puedes hacerlo mientras tengas el elemento de cabeza. Una vez que pierda la referencia al primer elemento al eliminar y no devolver el elemento siguiente o insertar un elemento antes del primer elemento y no devolverlo, no podrá realizar sus búsquedas.
Usted no puede LinkedList es solo una implementación de List y no ofrece nada más. Necesitarías hacer el tuyo.
Para node1.next()
necesitaría una referencia de node1
a la lista. En realidad, necesitaría varias referencias, ya que node1
puede estar allí varias veces. Además, puede estar contenido en múltiples listas.
Tal vez puedas usar ListIterator
para esto.