L'extrait de code suivant ne fonctionne pas correctement.fonction de suppression de la liste chaînée
void deleteNode(list **start, int pos) {
int currentPosition=0;
list *currentNode;
list *nodToDelete;
currentNode = *start;
if (currentNode == NULL) {
printf("Empty List\n");
} else if (pos == 0) {
nodToDelete = *start;
*start = nodToDelete->next;
free(nodToDelete);
} else {
while (currentNode->next != NULL) {
if (currentPosition >= pos -1) {
break;
}
currentPosition++;
currentNode = currentNode->next;
}
if (currentPosition < pos -1 || currentNode->next == NULL) {
printf("No node at given position exists\n");
} else {
nodToDelete = currentNode->next;
currentNode = nodToDelete->next;
free(nodToDelete);
nodToDelete = NULL;
}
}
}
void displayList(list *node) {
if (node == NULL) {
printf("Empty List");
}
while (node != NULL) {
printf("%d\t", node->data);
node = node->next;
}
printf("\n");
}
int main()
{
list *start, *node;
start = NULL;
insertNode(&start, 2);
insertNode(&start, 3);
insertNode(&start, 4);
insertNode(&start, 1);
insertNode(&start, 5);
deleteNode(&start, 3);
displayList(start);
}
Lorsqu'il est exécuté la sortie est
Avant d'effacer 2 3 4 1 5
Après la suppression 2 3 4 0 5
Il est censé supprimer 1 mais il est insérait 0 à sa place.
Votre code est incomplet; veuillez montrer la définition de 'list'. – zwol
Nous avons vraiment besoin de plus de code. – dcousens
Ne devrait pas currentNode = nodToDelete-> next être currentNode-> next = nodToDelete-> next; – Ben