Ich habe ein Problem mit diesem Teil des Codes. Mein Ziel ist es, eine doppelt verkettete Liste umzukehren. Ich erhalte ungültige Werte, wenn ich versuche, die umgekehrte Liste auszudrucken.Doppelt verkettete Liste umkehren - Mülldaten ausdrucken
typedef struct node{
int val;
struct node* prev;
struct node* next;
}Node;
typedef struct list{
Node* head;
Node* tail;
}List;
void pushFront(List* l, Node* node){
if(l->head == NULL){
l->head = node;
l->tail = node;
l->tail->next = NULL;
}else{
l->head->prev = node;
node->next = l->head;
l->head = node;
}
}
void printList(List* list){
Node *ptr = list->head;
while(ptr != NULL){
printf("%i ",ptr->val);
ptr = ptr->next;
}
puts("");
free(ptr);
}
void reverse(List* lista){
Node* ptr = lista->head;
Node* temp = NULL;
while(ptr != NULL){
temp = ptr->prev;
ptr->prev = ptr->next;
ptr->next = temp;
ptr = ptr->prev;
}
if(temp != NULL)
lista->head = temp->prev;
free(ptr);
free(temp);
}
Ausgang I erhalten:
Originalliste: 1 2 3 4 5 6 7
Reversed-Liste: 1 8532616 3 4 5 6 7 8528368 2002618240
'if (! Temp = NULL) lista-> head = temp-> zurück;' nicht wahr? Was macht das? Die Liste hat einen Kopfzeiger * und einen Schwanzpointer *, was soll mit ihnen geschehen? –
In Ihrer 'printList' nennen Sie' free (ptr) 'wenn getan, was gleichbedeutend mit' free (NULL) 'ist, was nichts macht, aber für keinen Zweck benötigt wird. –