linkedlist - queue java




¿A qué se refiere "esto" en el ejemplo de Lista enlazada? (4)

Como esta es una lista vinculada, todos los nodos están conectados y usted tiene un nodo de inicio (raíz). Entonces cuando lo use se vería así:

Node root = new Node(6); //need an instance first
root.appendToTail(5);
root.appendToTail(3);
//6->5->3

Dado que los nodos están conectados, necesito un nodo de inicio y necesito verificar si tiene un próximo nodo cuando sí. Necesito buscar más profundamente. Cuando un nodo no tiene un próximo nodo, es el último actual y puede agregar mi nuevo nodo. Entonces esto en Java se refiere a la instancia actual de una clase. En mi ejemplo, el Nodo raíz (porque yo llamo root.appendToTail). Entonces el método buscará desde el Nodo raíz (valor 6) el próximo Nodo sin un Siguiente Nodo (el que tiene el valor 3) y lo agregará allí. Si puedo obtener una referencia secundaria y llamaría a child3.appendToTail, el método buscaría desde child3 en lugar de comenzar desde mi raíz.

Al establecer n en nulo y reescribir el tiempo para ir de aquí a continuación , tendría un problema cuando el nodo actual que utiliza appendToTail no tuviera un próximo nodo y se lanzaría una NullPointerException.

Así que estoy hojeando la entrevista Cracking the Coding para repasar algunas cuestiones de la entrevista y me encontré con esta implementación de la lista vinculada, y tal vez ha pasado un tiempo, pero está pasando por alto por completo. Entiendo la mayor parte, a excepción de una línea específica, y me está tirando. Publicaré el código a continuación (como referencia, el libro no menciona el idioma, pero parece ser Java).

class Node {
    Node next  = null;
    int data;

    public Node(int d) {
        data = d;
    }

    void appendToTail(int d) {
        Node end = new Node(d);
        Node n = this;
        while(n.next != null) {
            n = n.next;
        }
        n.next = end;
    }
}

Estoy un poco confundido en la línea: Node n = this - No estoy seguro de a qué se refiere esto, a menos que esté hablando del next - ¿por qué no simplemente establecerlo como null en ese caso?


Como puedes ver en este código

class Node {
   //

   void appendToTail( int d ) {
       Node *end = new Node( d );
       Node n = this;
       // ...
   }
}  

Su Node clase tiene una referencia a un Node en su definición.

La línea: Node *end = new Node( d ); significa que dentro de un Node hay una referencia a otro nodo.

La línea Node n = this; significa dentro de un Node la referencia a ese nodo en , está representado por this . Ergo, n también es una referencia a dicho nodo en sí mismo.


Esto es Java

" this " se refiere a la instancia específica de la clase en la que se realiza la llamada. En este caso, " this " se refiere al Node clase específico con el que se está tratando. Mientras que la variable " end " crea una versión nueva y separada de la clase Node que se construye utilizando la pasada " d ".


Node n = this; significa n referencias de objetos al objeto que está llamando a este método. Entonces, el método está girando al siguiente objeto hasta que el próximo objeto sea nulo y se asigne un nodo end al final.

Veamos

1 -- 2 -- 3 -- 4
*
|
*
obj

tiene un objeto obj que apunta al nodo 1. Cuando llama a obj.appendToTail(5)

Node end = new Node(d); //new node is created to add to the end.
Node n = this; //local n object is referenced to node 1(or obj)
while(n.next != null) {
   n = n.next;
}
//n here is node 4 since there is no next node to 4
n.next = end; //node 5 is tail now

Resultado final: 1 -- 2 -- 3 -- 4 -- 5





linked-list