Lista jednostronna. Kopiowanie.

0

Napisałem kawałek kodu, który ma w założeniu skopiować z danej już listy elementy od x do y i dodać ten fragment na koniec istniejącej listy. Nie wiem co może być źle bo intuicja podpowiada mi, że powinno to działać. Może nie dopatrzyłem się jakichś błędów. Proszę o jakąkolwiek pomoc.

void kopiuj(int x, int y)
{
    if (head!=NULL)
    {
        node *pom = head;
        while(pom->val!=x || pom!=NULL)
        {
            pom=pom->next;
        }
        
        if(pom!=NULL)
        {
            node *pom2=pom->next;
            while(pom2!=NULL || pom2->val!=y);
            {
                pom2 = pom -> next;
            }

            if(pom2!=NULL)
            {
                node *pom3=pom2;
                while(pom3->next!=NULL)
                {
                    pom3 = pom3 -> next;
                }
                while(pom->next!=pom2)
                {
                    pom3->next =new node;
                    pom3 = pom3 -> next;
                    pom3 -> val = pom -> next -> val;
                    pom = pom -> next;
                }
                pom3 -> next = NULL;
            }
        }            
    }
}

zmniejszenie wcięć w kodzie - fp

0

Nie mam pojęcia i nie zamierzam tego w żaden sposób debugować, ponieważ ta funkcja to jedna wielka nieczytelna porażka.
1.Funkcja o poziomie zagłębienia większym niż trzech, to jakieś nieporozumienie.
2.Po ludzku ten kod powinien prezentować się jakoś tak:

void copy_elements(List input, List output, int range_from, int range_to)
{
 Input.foreach([=]
 (ListElement element)
 {
  int value = element->value;
  if ((value >= range_from) && (value <= range_to))
   Output.append(value);
 });
}

Gdzie metoda foreach iteruje po liście i dla każdego jej elementu wywołuje funkcję podaną w pierwszym parametrze z parametrem będącym wskaźnikiem do tego elementu listy (widać to zresztą z kodu).


Btw, zauważyłem jednak potencjalny problem: ```cpp while(pom2!=NULL || pom2->val!=y); ``` Zbędny średnik.
0

Wiem, że takie rzeczy da się zrobić krócej, i że ten kod to lekka plątanina, ale tutaj chodzi o to, żeby było sposobem profesora... Średnik nic nie dał. Wszystko się kompiluje, ale wyskakuje ,,Unhandled exception at 0x001c1dd6 in Lekcja2Listy odwracanie, sortowanie itp.exe: 0xC0000005: Access violation reading location 0x00000000.". Poszukam jakiegoś gotowca bo chyba inaczej tego nie zrobię.

0

No to albo:

  • debugger w łapkę i odnajdź błąd (tutaj najwidoczniej masz gdzieś null-pointer-read).
    albo
  • napisz to po ludzku i powiedz profesorowi: http://ludzie.4programmers.net/bash/?574
    lub
  • napisz ten kod po prostu od nowa, niekoniecznie już po ludzku
    lub
  • odnajdź gotowca
    ewentualnie
  • zapłać za porządnego gotowca (dział "Praca").

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