Sortownie listy jednokierunkowej

0

Mam problem z sortowaniem listy,
próbowałem napisać funkcję sortującą moją listę. Wzorowałem się na tym kodzie https://www.dropbox.com/s/ldyfrglqbd5t46z/InsertionSortLinkedList.txt?dl=0
Niestety moja funkcja kasuje całą listę i kończy program bez wyrzucania błędów. Bedę starasznie wdzięczy jak ktoś mi powie co robię inaczej niż jest w kodzie z linku.

#include <iostream>
#include <cstdlib>

using namespace std;
struct Lista{
    int dane;
    Lista *nastepny;
};

void dodaj(Lista *&start){
    Lista *p = start;
    for(int i=0; i<10; i++){
        p=new Lista;
        p->dane=rand()%10;
        p->nastepny = start;
        start = p;
    }
}

void sortuj(Lista *&start){
    Lista *p = start;
    Lista *sort = p;

    start = start->nastepny;

    while(start!=NULL){
        sort=p;
        while(sort->nastepny != start){
            if(sort->dane > start->dane){
                int pom = start->dane;
                start->dane = sort->dane;
                sort->dane=pom;
            } else sort = sort->nastepny;
        }
        start = start->nastepny;
    }

}

void drukuj_liste(Lista *&start){
    Lista *p;
    p=start;

    while(p){
        cout << p->dane << " ";
        p=p->nastepny;
    }

}

void usun(Lista *&start){
    Lista *p;
    while(start){
        p=start;
        start = start->nastepny;
        delete p;
    }

}

int main()
{
    Lista *start=NULL;
    dodaj(start);
    drukuj_liste(start);
    cout << endl;
    sortuj(start);
    drukuj_liste(start);
    usun(start);
}

 
1
Czerwony Diabeł napisał(a):

Bedę starasznie wdzięczy jak ktoś mi powie co robię inaczej niż jest w kodzie z linku.

void sortuj(Lista *&start)

Kod z linku nie przekazuje referencji wskaźnika, dzięki czemu start nie trafia na koniec listy po wyjściu z funkcji.

0
twonek napisał(a):
Czerwony Diabeł napisał(a):

Bedę starasznie wdzięczy jak ktoś mi powie co robię inaczej niż jest w kodzie z linku.

void sortuj(Lista *&start)

Kod z linku nie przekazuje referencji wskaźnika, dzięki czemu start nie trafia na koniec listy po wyjściu z funkcji.

Rzeczywiście, masz rację, dzięki wielkie :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1