Scalanie list

Odpowiedz Nowy wątek
2015-02-01 20:55
0

Cześć wszystkim.
Uczę się nieco o listach więc napisałem sobie programik który wykonuje na nich podstawowe operacje jak dodawanie elementów,odwracanie,itp.

Pomimo gapienia się w kod od ponad 20 minut nie mogę ogarnąć dlaczego scalanie dwóch posortowanych tablic mi nie wychodzi.( są scalane ale że tak powiem jedna po drugiej a nie z zachowaniem monotoniczności)

Byłbym wdzięczny gdyby ktoś rzucił na to okiem i udzielił mi jakiejś wskazówki.
Ja zazwyczaj jak coś sprawdzam to lubię sobie wrzucić w IDE także w razie czego wrzucam link do całego kodu ale że jest on dosyć długi to tutaj wkleję tylko powiązane z problemem funkcje.

Problem (oczywiście oprócz tego między fotelem a klawiaturą) jest oczywiście w funkcji o nagłówku "scalaj" aczkolwiek gdybyście wychwycili jakieś inne błędy albo coś jest brzydko napisane to bardzo proszę o komentarz.

Link do całego kodu : http://pastebin.com/1gZbi2QA

Funkcje "biorące udział w problemie" :

struct node
{
    int data;
    node * next;
};

void scal(node * &l1,node * l2)
{
    node * scalona_lista = new node;
    scalona_lista->next = NULL;
    scalona_lista = NULL;

    while( l1 != NULL && l2 != NULL)
    {
        if(l1->data >= l2->data)
        {
            dodaj_na_koniec(scalona_lista,l1->data);
            l1 = l1->next;
        }
        else
        {
            dodaj_na_koniec(scalona_lista,l2->data);
            l2 = l2->next;
        }
    }
    while( l1 != NULL)
    {
        dodaj_na_koniec(scalona_lista,l1->data);
        l1 = l1->next;
    }
    while(l2 != NULL)
    {
        dodaj_na_koniec(scalona_lista,l2->data);
        l2 = l2->next;
    }

    cout<<"Oto scalona lista : ";
    wypisz_liste(scalona_lista);
}

void dodaj_na_koniec(node * &head,int added_data)
{
    if(head == NULL)
    {
        head = new node;
        head->data = added_data;
    }
    else
    {
        node * przesuwak = head;
        while(przesuwak->next != NULL)
        {
            przesuwak = przesuwak->next;
        }
        node * nowy_ogon = new node;
        nowy_ogon->data = added_data;
        przesuwak->next = nowy_ogon;
    }
}

Pozostało 580 znaków

2015-02-01 21:40

Jeśli gapienie się w kod nie pomaga, to może trzeba debuggować? Dodaj wypisz_liste(scalona_lista) do róznych miejsc (wewnątrz if, wewnątrz else, po pierwszej pętli, po drugiej pętli) i analizuj wyjście.

node * scalona_lista = new node;
....
scalona_lista = NULL;

najbezsensowniejszy wyciek pamięci jaki widziałem :P

Rzeczywiście wystarczyło to przypisanie NULL'a skasować i działa. Masakra! Dziękuje za pomoc - szukałem błędu w samym scalaniu i zignorowałem ten fragment kodu. - piter96 2015-02-01 21:44

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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