J'ai travaillé avec une liste doublement chaînée. Tout fonctionne bien avec l'exemption de la fonction qui devrait ajouter une copie de 'who' avant 'whereX' [voir code ci-dessous]. Pourquoi la fonction ne fonctionne-t-elle pas?Comment ajouter un noeud dans un emplacement spécifique?
void addNodeAt(Node *whereX, Node *who)
{
//copy
Node *temp = (Node*)malloc(sizeof(Node));
temp->count = who->count;
strcpy(temp->word,who->word);
temp->before = whereX->before;
temp->after = whereX;
//paste
if(whereX->after == who)
whereX->after = who->after;
whereX->before = temp;
}
EDIT:
En réponse à user326404 qui a dit:
« Note: Votre fonction ne souffre d'un défaut qui empêche d'insérer qui, comme la nouvelle tête de liste. Il va s'insérer, mais vous ne renverrez jamais le nouveau nœud principal, donc la liste est perdue. ' Et si j'ai une tête de nœud * en tant que variable globale,
Comment puis-je redéfinir la tête sans la retourner?
que se passe-t-il si je ne souhaite pas renvoyer la nouvelle tête et que j'ai une tête de nœud * en tant que variable globale. comment puis-je réparer la faille? –
Avec une variable globale tenant la tête, vous devez libérer() l'ancienne tête et la pointer vers la nouvelle. – Manfre
M ... C'est intéressant. La variable globale 'head' que je viens de pointer sur le premier noeud de la liste et le dernier noeud de la liste donc 'whereX' ou 'who' ne sera jamais en tête. Est un peu comme un pont. –