/* Launo Tuuri --- C-ohj (Taina) s97 ------ Laskarit 6 Tehtävä 3 */ #include #include #include /* luentomateriaalista: */ struct solmu { struct solmu *seur; int tieto; /**/ }; struct lista { struct solmu *ekasolmu; }; struct lista *perusta_lista() { struct lista *l; l = malloc(sizeof(struct lista)); if (l == NULL) return NULL; l->ekasolmu = NULL; return l; } struct solmu *luo_solmu() /* irrallinen, alusta tyhjäksi */ { struct solmu *s; s = malloc(sizeof(struct solmu)); if (s == NULL) return NULL; memset(s, 0, sizeof(struct solmu)); return s; } int lisaa_solmu(struct lista *l, struct solmu *s) /* liitä listan alkuun */ { s->seur = l->ekasolmu; l->ekasolmu = s; return 1; } struct solmu *poista_solmu(struct lista *l) { struct solmu *s; s = l->ekasolmu; if (s) l->ekasolmu = l->ekasolmu->seur; return s; } /* itse tehty: */ struct lista *kaanna(struct lista *l) { struct solmu *r, *s; struct lista *kl = perusta_lista(); for (r=l->ekasolmu; r; r=r->seur) { s = luo_solmu(); s->tieto = r->tieto; lisaa_solmu(kl, s); } s = l->ekasolmu; while (s) { r = s; s = s->seur; free(r); } free (l); return kl; } int main() { struct lista *k = perusta_lista(); struct solmu *s; int i; for (i=0; i<20; ++i) { s = luo_solmu(); s->tieto = i; lisaa_solmu(k, s); } for (s=k->ekasolmu; s; s=s->seur) printf("%d ", s->tieto); printf("\n"); k = kaanna(k); for (s=k->ekasolmu; s; s=s->seur) printf("%d ", s->tieto); printf("\n"); return 0; }