Strona 1 z 1

Odwracanie listy jednokierunkowej [ANSI C]

: 24 maja 2011, o 15:17
autor: pawwach
Witam,

Oto uczyniłem prostą listę jednokierunkową:

Kod: Zaznacz cały

#include <stdio.h>
#include <stdlib.h>

struct el_listy {
    int klucz;
    el_listy *nast;
};

int main(){
    el_listy *head;
    head=(el_listy*)malloc(sizeof(el_listy*));
    head->nast=NULL;
}
Teraz moje zadanie brzmi - odwrócić listę bez użycia dodatkowej listy/tablicy. Jakieś pomysły? Iteracyjnie/rekurencyjnie? Nie oczekuję kodu, zadowolę się jakąś sensownie naprowadzającą podpowiedzią

Odwracanie listy jednokierunkowej [ANSI C]

: 24 maja 2011, o 15:28
autor: argv
Iteracyjnie - bardzo podobnie do przechodzenia listy, ale z jednym pomocniczym wskaźnikiem czyli standardowe poprz, akt i jakiś pom (jego funkcja to bycie poprzem poprza).

Odwracanie listy jednokierunkowej [ANSI C]

: 24 maja 2011, o 20:55
autor: pawwach
No i niestety, nie rozumiem Cię Moje przeglądanie iteracyjne wygląda tak:

Kod: Zaznacz cały

void przegladaj_ite(el_listy *head){
     el_listy *p=head->nast;
     if (p==NULL) printf("Lista jest pusta.");
     else {
     while(p!=NULL){
                    printf("%d ", p->klucz);
                    p=p->nast;
     }
     }
}

Odwracanie listy jednokierunkowej [ANSI C]

: 24 maja 2011, o 21:52
autor: Xitami

Kod: Zaznacz cały

p=head; r=null
while p!=NULL
    q=p->nast
    p->nast=r
    r=p
    p=q
head=r

Odwracanie listy jednokierunkowej [ANSI C]

: 24 maja 2011, o 23:19
autor: pawwach
Dziękuję za podpowiedzi Panowie Pamiętając, że u mnie głowa listy nie zawiera żadnej interesującej mnie wartości klucza, a jedynie wskaźnik do pierwszego elementu listy właściwej, mój kod wygląda tak:

Kod: Zaznacz cały

void odwroc (el_listy *head){
    el_listy *a=head->nast; // aktualny
    el_listy *p=NULL; // poprzedni
    el_listy *n=NULL; // nastepny
    
    while (a!=NULL){
        n=a->nast;
        a->nast=p;
        p=a;
        a=n;    
    }
    
    head->nast=p;
}
I działa