2017-10-02 3 views
-1

Récemment j'ai lu une implémentation de la mise en file d'attente dans java, et deviens vraiment confuse à la signification des lignes de couple dans celle-ci.difficultés implémentant la file d'attente par liste-liée dans java

public void enqueue(String item) { 
    Node oldlast = last; 
    last = new Node(); 
    last.item = item; 
    last.next = null; 

    if (isEmpty()) 
     first = last; 
    else 
     oldlast.next = last; 
} 

Je suis confus que depuis oldlast est créé uniquement dans cette méthode, pourquoi nous indiquer « oldlast.next = dernière » après les autres? il serait détruit après la méthode, non?

De plus, si nous ajoutons seulement le dernier en premier quand le premier est vide, est-ce que ce serait bogué si j'ajoute deux nœuds puis que j'en supprime deux? Puisqu'un seul noeud est ajouté au premier et que je veux en supprimer deux, y aura-t-il une exception?

Répondre

0
public void enqueue(String item) 
{ 
    Node oldlast = last; // last points to some Node_A, oldlast also will point at the same object 
    last = new Node(); // Now last points to new object (Node_B), old last still points to Node_A 
    last.item = item; 
    last.next = null; 
    if (isEmpty()) first = last; 
    else oldlast.next = last; 
} 
0

oldLast n'est pas créé, il est tout simplement une référence au même objet que last.

public void enqueue(String item) 
{ 
    Node oldlast = last; // oldLast -> nodeX, last -> nodeX 
    last = new Node(); // oldLast -> nodeX, last -> nodeY 
    last.item = item; 
    last.next = null; 
    if (isEmpty()) first = last; 
    else oldlast.next = last; // change the nodeX 
}