einfach verkettete Liste - reverse rekursiv
-
Hallo Leute,
wie ihr schon gemerkt habt möchte ich eine einfach Verkettete Liste umkehren, mit einer rekursiven Funktion.
also meine verkettete Liste sieht so aus:(ich schreibe nur teile des Programms)
struct listev { char eintrag; struct listev *next; }; void anhaengen(struct listev *a, struct listev *b){ a->next = b; } struct listev eintraege[strlen(eingabe)-1]; scanf("%[^'\n']",eingabe); for(i=0;i<strlen(eingabe)-1;i++){ anhaengen(&eintraege[i], &eintraege[i+1]); } eintraege[strlen(eingabe)-1].next = NULL;
also hat man z.B. mit "test" als eingabe:
eintaege[0] mit eintrag=t,eintaege[1] mit eintrage=e,eintaege[2] mit eintrag=s und eintaege[3] mit eintrag=tmir fällt da nichts ein
(nichts rekursives)
Bin für jede Hilfe Dankbar.
-
z.B. so
struct listev* swap_next(struct listev* p, struct listev* next){ struct listev* res=p->next; return p->next=next, res; } struct listev* do_reverse(struct listev* src, struct listev* dest){ return src==0?dest:do_reverse(swap_next(src,dest),src); } struct listev* reverse(struct listev* src){ return do_reverse(src,0); }
-
Dankeschön, jetzt geht mir ein Licht auf, eine frage:
Wozu hast du die reverse funktion? Man kann doch do_reverse aufrufen indem man das erste Element und eine 0 direkt übergibt. Oder sehe ich da etwas nicht?