/* AGS 3.27 */ (a) typedef struct listenelement *LPtr; typedef struct listenelement { int zahl; LPtr next; } l_ele; void Tree_to_list(TPtr t, LPtr *l) { if (t == NULL) return; Tree_to_list(t->left, l); if (t->key % 2 == 1) append(l, t->key); Tree_to_list(t->right, l); } // moegliche Implementierung von append (nicht gefordert!) void append(LPtr *l, int n) { if (*l == NULL) { *l = (LPtr) malloc(sizeof(l_ele)); (*l)->zahl = n; (*l)->next = NULL; } else append(&(*l)->next, n); } // Aufruf: LPtr liste = NULL; TPtr baum; ... Tree_to_list(baum, &liste); (b) /* * Es werden die Richtungen der Verweise auf die Nachfolger umgedreht. */ void reverse(LPtr *l) { LPtr h; if (*l == NULL || (*l)->next == NULL) return; // Restliste sichern h = (*l)->next; // Verbindung zum Nachfolger aufloesen (*l)->next = NULL; reverse(&h); // Restliste invertieren // // ehemaliges Kopfelement hinten anhaengen // append_element(&h, *l); // Zeiger auf neuen Listenkopf setzen *l = h; } // moegliche Implementierung von append_element (nicht notwendig!) void append_element(LPtr *l, LPtr x) { if (*l == NULL) { *l = x; (*l)->next = NULL; return; } append_element(&(*l)->next, x); } // Aufruf: LPtr liste; ... reverse(&liste);