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