On m'a demandé un ami de l'aider avec un exercice, fondamentalement, l'idée est comme ci-dessous. Il a été dit de ne pas utiliser de choses comme donc j'ai fait ce programme. Lorsque j'appelle la fonction Pouvez-vous me dire ce qui ne va pas avec mon code? p> String code> ou
getline code>, c'est donc une application simple pour apprendre l'idée de travailler avec des listes liées. p>
Supprimer () code> la première fois, il est indiqué que la liste est vide au début (comme cela devrait le faire). Mais la deuxième et la troisième fois, il dit que la voiture est supprimée, mais lorsque j'appelle la fonction
afficheur () code>, la voiture est toujours là (elle n'a pas supprimé de la liste) p >
3 Réponses :
p = p-> lien; code> Vous modifiez la valeur de la variable locale P, pas la liste. Vous devez modifier le champ
LINK CODE> DU NODE PRÉCIALE. P>
Pouvez-vous suggérer un petit code ou l'expliquer plus à comprendre ce que vous voulez dire s'il vous plaît? Je ne pouvais pas l'obtenir.
Votre Essayez cela à la place: P> Supprimer () code> La fonction ne supprime pas (ou détruire) un nœud de la liste. Vous devez mettre à jour le lien code> du nœud Précédent em> dans la liste pour pointer sur le nœud Suivant em> dans la liste. Et vous devez mettre à jour aussi la tête code> aussi, si vous retirez le 1er noeud de la liste.
void remove()
{
if (isempty())
{
cout << "List is empty\n";
return;
}
char carnumber[15];
cout << "Enter car number to remove: ";
cin >> carnumber;
node **p = &head;
while (*p != NULL)
{
if (strcmp((*p)->carNumber, carnumber) == 0)
{
node *n = *p;
*p = (*p)->link;
delete n;
cout << "Car removed\n";
return;
}
p = &(p->link);
}
cout << "Car was not found, check the number\n";
}
Merci beaucoup !!! Vraiment apprécié, j'espère que vous passez une bonne journée monsieur!
dans la boucle Enlever, vous faites Voici un moyen simple de faire cela: p> p = p-> link code>, lorsque
p code> pointe sur le nœud que vous souhaitez supprimer. Mais vous devez réellement mettre à jour le champ code> lien code> du nœud qui pointe vers
p code>.
auto h = *p;
*p = (*p)->link);
delete h;
Si l'ami de l'OP n'est pas autorisé à utiliser des choses comme std :: string code> et
std :: getline () code>, ils ne seront certainement pas autorisés à utiliser
std :: échange () code>, soit.
@RemyleBeau Oh, qui a été ajouté à la question. Honte, c'est beaucoup plus élégant: p
" Ceci est beaucoup plus élégant i>" - en utilisant std: :( wwward_) liste code> serait une solution encore plus élégante. Mais il semble que l'exercice ne veut pas l'élégance ;-)
Cigien @RemyleBeau a raison et TBH Je n'ai pas entendu parler de cela aussi, d'apprendre encore sur des pointeurs que vous voyez, j'ai fait une énorme erreur que j'aurais dû être au courant de, merci un million pour vos efforts de vos gars. Passez une bonne journée <3
@Aligx Eh bien, c'est une bonne occasion d'apprendre :)
@Aligx " Encornez toujours sur les pointeurs i>" - dans tous honnêtement, le code moderne i> C ++ devrait s'efforcer de rester rester à l'écart i> d'utiliser cru I> Pointeurs et Nouveau code> autant que possible. Ils ont leur part d'utilisation, et ils ont également leur part d'erreurs sujettes à l'erreur. Les mineurs RAW i> Les pointeurs que vous utilisez, moins votre code sera présenté par erreur.
@RemyleBeau Exactement, c'était ma première question pour l'OP. Mais s'ils doivent écrire une liste liée, ils doivent l'écrire. Abandonner une abstraction ne signifie pas qu'ils doivent tous abandonner tous :)
Cet exercice nécessite-t-il I> pour écrire le code de liste liée? Il peut être mis en œuvre beaucoup plus facilement autrement.
Votre fonction code> Supprimer code> ne fait rien pour changer la liste.
Voir Comment puis-je supprimer correctement des nœuds de liste liée en C ++ . Portez une attention particulière à l'alternative à l'aide du pointeur au pointeur b>
@Cigien Oui Il est demandé d'utiliser la liste liée.
@ user4581301 merci beaucoup
@interjay je l'ai eu merci mate