1
votes

Lors de la suppression du dernier nœud de la liste liée, j'attribue temp à null, mais il est toujours là et n'est pas supprimé. Java

Lors de la suppression du dernier nœud de la liste liée, j'attribue temp à null, mais il est toujours là et n'est pas supprimé. (Java)

Output:
5
9
6
7
After deleting last node: 
5
9
6
7
public void deleteFromBack() {

        if (!isEmpty()) {
            Node temp = first;
            while (temp.next != null) {
                temp = temp.next;
            }
            temp=null;

        }
    } 


3 commentaires

Nous ne pouvons pas vous donner de réponse sans voir le code de l'ensemble de l'implémentation de votre liste. La suppression d'un nœud est plus compliquée que cela, car vous devez faire quelques épissures pour le supprimer (la plupart du temps).


montrez votre code entier alors nous pourrons comprendre


Eh bien, qu'est-ce qui n'est pas vide dans cette ligne if (! IsEmpty ()) {? Veuillez partager le code complet.


3 Réponses :


0
votes

Ce que vous définissez sur null est temp , qui est une variable locale; dès que le bloc dans lequel il est déclaré est laissé, il est hors de portée, donc le définir sur null n'a aucun effet.

Ce que vous voulez faire est de définir le code suivant > élément de ce nœud à null, donc la queue est coupée.

temp.next = null;

Cependant, puisque vous faites une boucle jusqu'à ce que vous trouviez un nœud avec next code > déjà défini sur null , vous devrez vous en souvenir un avant cela. De plus, vous aurez besoin d'un cas spécial pour le dernier élément de la liste.


0 commentaires

0
votes

Vous ne supprimez pas le nœud dans l'extrait que vous avez écrit dans l'OP. Vous attribuez simplement null à temp.

    if (!isEmpty()) {
        Node temp = first;
        Node previousNode = null;
        while (temp.next != null) {
            previousNode = temp;
            temp = temp.next;
        }
        previousNode.next = null;
    }

Pour supprimer le nœud de la liste, vous devez rendre nulle la valeur du nœud qui contient la référence au dernier nœud.


2 commentaires

pourquoi ne pas simplement affecter le nœud à null ne le supprime-t-il pas? pouvez-vous expliquer plus plz?


car temp ne "contient" pas le nœud, il stocke simplement la référence à celui-ci. En d'autres termes, temp connaît l'adresse où le nœud est stocké. Lorsque vous modifiez le contenu de temp, cela n'aura aucun effet sur le nœud lui-même.



0
votes

La raison en est que la variable temp est juste une autre variable de référence qui pointe vers le dernier nœud de la liste liée avec l'avant-dernier nœud.

Par exemple: -

SecondLastNode.next---\
                       \
                        ------>LastNodeOflinkedList  
                       /
temp------------------/

Dans votre scénario, vous attribuez uniquement null à temp tandis que SecondLastNode.next pointe toujours vers le dernier nœud.

Résolution: -

Attribuez null à SecondLastNode.next code>


0 commentaires