Je prépare un programme qui prend une liste de nombres entiers dans l'entrée, et sur la base du nombre entier, il effectue les opérations suivantes:suppression d'un élément de liste liée provoque une boucle infinie
supprimer la valeur absolue si la valeur en entrée est négative
Si le nombre est positif et même, puis ajouter sur le haut de la liste
Si le nombre est positif et impair, ajoutez-le sur la queue de la liste
Si le nombre est égal à zéro, terminez le programme et imprimez la liste.
Mon problème est avec la fonction pop_el, ce qui provoque une boucle infinie sur la liste, donc quand j'imprimer la liste du programme va dans une boucle infinie. Voici mon code:
#include <stdio.h>
#include <stdlib.h>
typedef struct ll_node_S * ll_node_ptr;
struct ll_node_S
{
int v;
ll_node_ptr next;
};
typedef struct ll_node_S ll_node;
ll_node_ptr push_tail(ll_node_ptr head, int v)
{
ll_node_ptr backup = head;
ll_node_ptr current = head;
while(current->next != NULL)
{
current = current->next;
}
current->next = (ll_node_ptr) malloc(sizeof(ll_node));
current->v = v;
return backup;
}
ll_node_ptr push_head(ll_node_ptr head, int v)
{
ll_node_ptr new_head = (ll_node_ptr)malloc(sizeof(ll_node));
new_head->v = v;
new_head->next = head;
return new_head;
}
ll_node_ptr pop_el(ll_node_ptr head, int el)
{
ll_node_ptr backup = head;
ll_node_ptr current = head;
ll_node_ptr previous = NULL;
int found = 0;
while(current != NULL && !found)
{
if(current->v == el)
{
if(previous == NULL)
{
backup = current->next;
free(current);
current = backup;
previous = current;
}
else
{
previous->next = current ->next;
free(current);
current = current->next;
}
found = 1;
}
else
{
previous = current;
current = current->next;
}
}
return backup;
}
void print(ll_node_ptr head)
{
ll_node_ptr current = head;
printf("%d\n", head->v);
while(current->next != NULL)
{
current = current->next;
printf("%d\n", current->v);
}
}
int isPair(int n)
{
return ((n % 2) == 0);
}
int main(int argc, char** argv)
{
int n = 1;
ll_node_ptr list = NULL;
while(n != 0)
{
scanf("%d", &n);
if(n < 0)
{
list = pop_el(list, -n);
}
else
{
if(isPair(n))
{
list = push_head(list, n);
}
else
{
list = push_tail(list, n);
}
}
}
print(list);
//should free the list
return 0;
}
ce qui est le cas de test (passé en entrée) je teste le code contre:
4
5
2
-4
-5
-3
9
2
0
qui devrait produire la sortie suivante:
2
2
9
des indices?
Debugger aiderait. –
Je développe le programme sur l'environnement cloud9 en utilisant un script personnalisé pour catcher le cas de test et l'injecter dans le programme, donc je ne peux pas utiliser les outils de débogage fournis par c9 (qui ne fonctionnent pas avec l'environnement CA) – Crax
Vous devriez investir dans un environnement de développement sur votre machine locale si vous voulez travailler efficacement. Et par «investissement» je ne veux pas nécessairement dire «argent» mais plutôt «temps». –