2017-05-03 2 views
0

Il y a un problème avec mon code. Après la suppression du noeud, le même noeud apparaît en tant que noeud précédent dans le noeud suivant. Essayer de supprimer le noeud 4.Suppression d'une valeur de la liste circulaire chaînée

Pervieux: noeud: 5; Noeud: 15; NextNode: 16 | Pervious: Noeud: 15; Noeud: 16; NextNode: 29 | Pervious: Noeud: 16; Noeud: 29; NextNode: 4 | Pervious: Nœud: 29; Noeud: 4; NextNode: 5 | Pervious: Noeud: 4; Noeud: 5; NextNode: 15 |

Après avoir retiré

drainants: Noeud: 5; Noeud: 15; NextNode: 16 | Pervious: Noeud: 15; Noeud: 16; NextNode: 29 | Pervious: Noeud: 16; Noeud: 29; NextNode: 5 | Pervious: Noeud: 4; Noeud: 5; NextNode: 15

public Node deleteValue(int i) { 
    Node node = start; 
    do { 
     if (node.next.getData() == i) { 
      Node n = node.next; 
      node.next = n.next; 

      size--; 

      if (n == start) { 
       start = node; 

      } 
      return n; 
     }][1] 

     node = node.next; 
    } while(node != start); 
    return null; 
} 
+0

Votre classe Node ont un champ/variable qui pointe vers le nœud précédent? Ou a-t-il seulement le prochain champ pointant vers l'élément suivant? –

+0

Oui, j'ai Node prev; – gate

+0

Eh bien, alors vous avez probablement modifié cela dans votre méthode remove. Vous ne modifiez actuellement que l'attribut suivant. Il n'est donc pas surprenant que l'attribut prev reste le même et pointe toujours vers l'élément supprimé. –

Répondre

0

Lorsque vous supprimez votre élément, il vous manque une simple ligne de code. Vous devez définir l'élément suivant de votre élément précédent et l'élément précédent de l'élément suivant. Il vous manque la deuxième partie. C'est ce que le code devrait ressembler à:

Node current = start; 
do{ 
    if(current.getData() == i){ 
    // set the previous's next element 
    current.previous.next = current.next; 
    // set the next element's previous element 
    current.next.previous = current.previous; 
    this.size--; 
    return current; 
    } 
    current = current.next; 
}while(node != start); 
return null; 
+0

merci beaucoup cela a fonctionné :) :) – gate