1
votes

Suppression du dernier nœud d'une liste liée individuellement

Vous trouverez ci-dessous la fonction pour supprimer le dernier nœud d'une liste liée individuellement. Je ne comprends pas, pourquoi créons-nous un nœud temporaire? J'ai essayé de le faire sans le nœud temporaire et utilisé le nœud lui-même, mais la sortie ne supprime pas le dernier nœud. De plus, puisque nous utilisons le noeud temporaire, pourquoi retournons-nous le noeud et non temp? Nous n'apportons aucune modification au nœud, alors comment le nœud est-il affecté?

public Node deleteLastNode(Node node)
{
    if (node.next == null || node == null)
        return null;
    Node temp = node;

    while (temp.next.next != null)
    {
        temp = temp.next;
    }
    temp.next = null;
    return node;
}


1 commentaires

Sans nœud temporaire, comment parcourriez-vous la liste?


4 Réponses :


1
votes

La raison pour laquelle le nœud temp est généralement utilisé est que le nœud est la tête / le début de la liste, qui est la seule représentation de la liste que nous avons (par définition d'une liste chaînée). Par conséquent, nous ne voulons pas modifier l'en-tête (ou la représentation de notre liste) et c'est la raison pour laquelle node est renvoyé par la méthode - ce qui signifie que nous retournons la liste mise à jour après la suppression.


0 commentaires

1
votes

Tout d'abord, vous devez changer cela pour des conditions comme celle-ci

if (node.next == null || node == null) to 
if (node == null || node.next == null) 

cela peut provoquer une exception de pointeur nul. next..Je pense que temp doit contenir des données avant d'attribuer null afin que la référence réelle ne perde pas de données.


0 commentaires

1
votes

Je ne comprends pas pourquoi nous créons un nœud temporaire?

C'est parce que vous stockez le nœud d'itération actuel dans cette variable temp .

J'ai essayé de le faire sans le nœud temporaire et utilisé le nœud lui-même, mais la sortie ne supprime pas le dernier nœud.

Code nécessaire pour fournir des commentaires.

De plus, puisque nous utilisons le noeud temporaire, pourquoi retournons-nous node et non temp?

Parce que vous renvoyez la référence à la tête de la liste, elle n'a tout simplement plus le dernier élément.

Nous n'apportons aucune modification au nœud, alors comment le nœud est-il affecté?

Vous supprimez le dernier nœud ici temp.next = null;

J'espère que cela rend les choses un peu plus claires pour vous.


2 commentaires

Pour parcourir la liste chaînée, pourquoi ne pouvons-nous pas utiliser le nœud lui-même. Par exemple, que se passe-t-il si j'écris la boucle while comme while (node.next.next! = Null) et que je ne crée pas du tout de variable temporaire. Pourquoi ça ne marche pas?


@Bobert, car vous perdrez la tête de liste



0
votes

Pour naviguer dans la liste liée jusqu'à son dernier nœud, vous avez besoin d'un pointeur (curseur) pointant sur un nœud que vous supposez être le dernier en attente du test this.next == null .

Sans le nœud temporaire (un curseur ou un pointeur), comment pourriez-vous interagir avec n'importe quel nœud de la liste?


1 commentaires

Pour parcourir la liste chaînée, pourquoi ne pouvons-nous pas utiliser le nœud lui-même. Par exemple, que se passe-t-il si j'écris la boucle while comme while (node.next.next! = Null) et que je ne crée pas du tout de variable temporaire. Pourquoi ça ne marche pas? Vous seriez toujours en train de parcourir la liste, n'est-ce pas?