J'ai des problèmes avec ma méthode d'insertion pour une liste liée à C. Il semble que ajouter uniquement au début de la liste. Toute autre insertion que je fais échoue. Et ce débogueur de codeBocks est si difficile à comprendre que je ne l'obtiens toujours pas. Cela ne me donne jamais de valeur, il suffit de s'adresser à la mémoire. Quoi qu'il en soit, c'est ma fonction. Voyez-vous une raison pour laquelle cela échoue? puis dans la principale, seul 929 est ajouté. P> //testing addNodeBottom function
addNodeBottom(929, head);
addNodeBottom(98, head);
addNodeBottom(122, head);
addNodeBottom(11, head);
addNodeBottom(1034, head);
6 Réponses :
Après que vous masloc code> a
nœud code> Assurez-vous de définir
nœud-> suivent = null code>.
int addNodeBottom(int val, node *head)
{
node *current = head;
node *newNode = (node *) malloc(sizeof(node));
if (newNode == NULL) {
printf("malloc failed\n");
exit(-1);
}
newNode->value = val;
newNode->next = NULL;
while (current->next) {
current = current->next;
}
current->next = newNode;
return 0;
}
Mais ce n'est pas la seule erreur, f.e. Il y a une pause manquante; code> dans le
pendant code> boucle aussi.
Ce code fonctionnera. La réponse de SampleBias est presque correcte, mais vous avez besoin d'un troisième changement:
node *current = head; while (current->next != NULL) { current = current->next; } current->next = newNode; printf("added later\n");
Pourquoi utilisons-nous Malloc? Pourquoi ne pas simplement créer une nouvelle variable du nœud type, obtenir son pointeur et la définir comme suivant.
@AbhinavmanChanda Malloc attribue de l'espace sur le tas qui est persistant parmi les appels de fonction. Si nous allions », créez simplement une nouvelle variable du nœud type, obtenez son pointeur et définissez-le comme suit." I> L'espace a été attribué dans le cadre de la pile de la fonction, de sorte que le pointeur signalait quelque part Dans le cadre de la pile de cette fonction. Une fois que nous avons appuyé sur la déclaration de retour, le cadre de la pile est distribué, nous laissant avec un pointeur qui pointe nulle part en sécurité.
Je voudrais mentionner la clé avant d'écrire le code pour votre considération.
// clé p>
TEMP = adresse du nouveau nœud attribué par la fonction MALLOC (Membre OD Alloc.h Bibliothèque en C) P>
ADRESSE DU NOUVEAU DE LA LISTE DE LIEN. . P>
Suivant = contient l'adresse du nœud suivant p>
Le nouveau nœud est toujours ajouté après le dernier nœud de la liste liée donnée. Par exemple, si la liste liée donnée est de 5-> 10-> 15-> 20-> 25 et que nous ajoutons un élément 30 à la fin, la liste liée devient alors 5-> 10-> 15-> 20-> 25- > 30. Étant donné qu'une liste liée est typiquement représentée par la tête de celui-ci, nous devons traverser la liste jusqu'à la fin, puis modifier le prochain nœud en dernier nœud.
/* Given a reference (pointer to pointer) to the head of a list and an int, appends a new node at the end */ void append(struct node** head_ref, int new_data) { /* 1. allocate node */ struct node* new_node = (struct node*) malloc(sizeof(struct node)); struct node *last = *head_ref; /* used in step 5*/ /* 2. put in the data */ new_node->data = new_data; /* 3. This new node is going to be the last node, so make next of it as NULL*/ new_node->next = NULL; /* 4. If the <a href="#">Linked List</a> is empty, then make the new node as head */ if (*head_ref == NULL) { *head_ref = new_node; return; } /* 5. Else traverse till the last node */ while (last->next != NULL) last = last->next; /* 6. Change the next of last node */ last->next = new_node; return; }
Cela fonctionne bien: exemple d'utilisation: p>
Je sais que c'est un ancien post mais juste pour référence. Voici comment ajouter sans contrôle spécial pour une liste vide, bien que, au détriment du code de recherche plus complexe.
void Append(List * l, Node * n) { Node ** next = &list->Head; while (*next != NULL) next = &(*next)->Next; *next = n; n->Next = NULL; }
Il n'enfère toujours que le premier si je définis NEWNODE-> à côté de NULL
Après
actuel-> suivant = newnode; code> faire une pause
; code>
Pouvez-vous mettre à jour le code avec la définition de structure pour
nœud code> et la nouvelle ligne? De plus, comment savez-vous que c'est le cas?
Vous pouvez également garder un pointeur de queue pour rendre votre insertion à la fin de la liste simple et ne pas avoir à marcher sur la liste.
+1 d'accord, gardez le pointeur de la queue pour faire ajouter l'annexe O (1)