Problemi con l'elenco a doppio legame
-
12-11-2019 - |
Domanda
Quindi ho ottenuto questo compito per realizzare un programma che consentirà all'utente di inserire una serie di elementi interi in un elenco a doppio legame e devo eliminare quelli che possono essere divisi (resto 0) con la somma delle loro cifre.
#include <stdio.h>
#include <stdlib.h>
#define NEW(t) (t*)malloc(sizeof(t))
typedef int info_t;
typedef struct element {
info_t info;
struct element *next;
struct element *prev;
} node;
typedef node* nodep;
void insert(nodep l, info_t x) {
nodep t = NEW(node);
t->info=x;
t->next=l->next;
l->next=t;
t->prev=l;
}
void printList(nodep l) {
nodep t=l->next;
while(t!=l)
{
printf("->%d", t->info);
t=t->next;
}
printf("\n");
}
void deletedividable(nodep l) {
nodep t=l->next;
nodep temp;
while(t->next!=l)
{
int temporary=t->info;
int sum=0;
while(temporary>0)
{
sum+=(temporary%10);
temporary/=10;
}
if(!(t->info%sum))
{
temp=t->next;
t->next->prev=t->prev;
t->prev->next=t->next;
free(t);
t=temp;
}
else
t=t->next;
}
}
int main() {
// declaring a leader node
nodep list = NEW(node);
list->next = list;
list->prev = list;
printf("Enter elements:\n ");
int a;
//if the input isn't a number the loop will exit
while(scanf("%d", &a)) {
//elements input function call
insert(list, a);
}
// print list function call
printList(list);
// delete elements which are dividable with the sum of their digits
deletedividable(list);
printList(list);
return 0;
}
Il problema è, dopo l'elenco cancellabile (elenco); Chiamata di funzione, nulla viene stampato quando viene chiamata la seconda elenco di stampa e non riesco a individuare il problema, alcuni dei puntatori devono essere rovinati, ma non sono sicuro di quali. Qualsiasi aiuto sarebbe molto apprezzato.
Nessuna soluzione corretta
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow