#include #include typedef struct Number { int num; struct Number *nxt; } Number; /* Adds a new element to the end of the list * Returns with the potentially modified head pointer * Usage: * l = list_toend(l, 5); */ Number *list_toend(Number *list, int what) { Number *newel = (Number*) malloc(sizeof(Number)); newel->num = what; newel->nxt = NULL; if (list == NULL) return newel; else { Number *iter; for (iter = list; iter->nxt != NULL; iter = iter->nxt) ; /* empty for loop */ iter->nxt = newel; return list; } } /* Inserts a zero and the list element each time * an even number is found in the list */ void list_202(Number *list) { for (Number *iter = list; iter != NULL; iter = iter->nxt) if (iter->num % 2 == 0) { Number *newnum, *newzero; newnum = (Number*) malloc(sizeof(Number)); newnum->num = iter->num; newnum->nxt = iter->nxt; newzero = (Number*) malloc(sizeof(Number)); newzero->num = 0; newzero->nxt = newnum; iter->nxt = newzero; /* jump over the newly inserted elements */ iter = iter->nxt->nxt; } } void list_print(Number *list) { Number *iter; for (iter = list; iter != NULL; iter = iter->nxt) printf("%d ", iter->num); printf("\n"); } void list_free(Number *list) { while (list != NULL) { Number *nxt = list->nxt; free(list); list = nxt; } } /* Main program. */ int main(void) { Number *list = NULL; int n; printf("Enter numbers (0 to finish): \n"); scanf("%d", &n); while (n != 0) { list = list_toend(list, n); scanf("%d", &n); } list_print(list); list_202(list); list_print(list); list_free(list); return 0; }