de manière itérative, copie d'une liste de liens
C'est un devoir à la maison. Pour modifier le récursive copie en profondeur de la méthode dans un processus itératif équivalent. Je suis venu près, et besoin de votre aide pour le faire.
Récursive de mise en œuvre:
public static StringNode copy(StringNode str) {
if (str == null)
return null;
StringNode copyFirst = new StringNode(str.ch, null);
copyFirst.next = copy(str.next);
return copyFirst;
}
Voici ce que j'ai trouvé, l'itératif équivalent. Le static length()
méthode a déjà été mis en œuvre pour retourner le nombre de nœuds sont là dans une liste de liens.
public static StringNode copy(StringNode str) {
if (str == null)
return null;
StringNode firstNode = new StringNode(str.ch ,null);
StringNode prevNode = firstNode;
StringNode nextNode;
for (int i = 1; i < length(str); i++) {
nextNode = new StringNode(str.next.ch, null);
prevNode.next = nextNode;
prevNode = nextNode;
}
return firstNode;
}
Le problème: pour tester mon application, j'ai créer une liste liée str1
avec la valeur du caractère, 'n', 'b', 'a'
, puis d'appeler
StringNode copy = StringNode.copy(str1);
puis-je supprimer le dernier nœud de str1, laissez le comme ça 'n','b',
cependant, lorsque j'essaie d'imprimer le contenu stocké dans la copie, je reçois
'n', 'b', 'b'
au lieu de 'n', 'b', 'a'
.
Des suggestions?
OriginalL'auteur Hank | 2012-11-06
Vous devez vous connecter pour publier un commentaire.
Vous aussi besoin de se déplacer à la
str
de l'avant dans votre boucle, sinon vous êtes en permanence en ajoutant lesame str
dans votrelist
à chaque itération. Premier élément est différent pour la première fois l'invocation de la méthode. et puisstr.next
est même par le biais de votre boucle.Donc, vous devez ajouter ce code dans votre boucle for: -
Aussi, la boucle a un problème. Vous ne devriez pas itérer jusqu'à la
length(str)
. Mais jusqu'àstr == null
.Donc, finalement, la boucle devrait ressembler à ceci: -
Une boucle while doit être utilisé dans ce cas, puisque vous ne savez pas combien de fois la boucle doit itérer.
Non, ne pas utiliser
for-loop
. Vous ne devez pas utiliserlength
à itérer. Plutôt itérer jusqu'à ce que vous obtenez unenull
str. Vérifier mes mises à jour de poste.Grâce Rohit. En fait au-dessus de la boucle while connu une exception de pointeur null dans mes tests, j'ai créé un
firstNode
en dehors de la boucle while. Par conséquent, il devrait êtrewhile(str.next != null) {...}
Oh, ouais. Vous êtes de droite. Va le Modifier. Merci de revenir et de pointage 🙂
OriginalL'auteur Rohit Jain