2017-08-29 2 views
1

Peut un pointeur être modifié lorsque nous modifions un pointeur vers même adresseBug dans l'inversion lié Liste

Code pour inverser Linked Liste

Node Reverse(Node node) { 
    Node prev = null; 
    Node current = node; 
    Node next = null; 
    Node n = null; 
    while (current != null) { 
     n = current; 
     next = current.next;  //this works 
     n.next = prev; 
    // next = current.next;  //this does not 
     prev = n; 
    current = next; 
    } 
    node = prev; 
    return node; 
} 

doute: Comment Le nœud n affecte le courant du nœud. Quand j'écris n.next, le courant est affecté, mais pourquoi?

Répondre

2

@Gaurav Anand

Oui, il affecte la valeur du courant parce courant noeud et n a la même adresse et toutes les modifications apportées à l'une ou l'autre de ces variables seront répercutées dans les deux car la valeur à l'adresse changera.

Dans votre code:
Lorsque next = current.next est placé après n.next = prev ne pas fonctionne parce que vous avez changé la valeur de n.next qui est le même que current.next à NULL (prev = NULL) comme le courant du nœud et n a la même adresse. Donc, si , vous utilisez place next = current.next après n.next = prev puis current = NULL et la boucle arrête d'itérer.

1

Ceci est dû au fait que n pointe vers le courant uniquement. 2 références pointent vers le même objet et donc lorsque vous changez n.next, les changements se reflètent dans current.next ainsi