• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z wskaznikiem

Object Storage Arubacloud
0 głosów
182 wizyt
pytanie zadane 11 marca 2018 w C i C++ przez lambdag Obywatel (1,310 p.)
edycja 11 marca 2018 przez Patrycjerz
struct node{
    int x;
    node *next;
};
void add(node *node1, int value)
{
    node *temp = new node;
    temp->x = value;
    temp->next = 0;
    if(node1 == 0)
    {
        temp->next = node1;
    }
    else{
    node *temp1 = node1;
    while(temp1->next != 0)
    {
        temp1 = temp1->next;
    }
     temp1->next = temp;
     //node1 = temp1;
    }
}
void print(node *node1)
{
     while(node1!= 0)
    {
        cout << node1->x << endl;
        node1 = node1->next;

    }

}
int main()
{
    node *start = 0;
     add(start, 5);
     add(start, 5);
     add(start, 5);
     add(start, 5);
    print(start);
    return 0;
}

Głównie to ta instrucja if(node1 == 0) { temp->next = node1; } nie działa, na pewno robię coś złe ale btw.. problem jest z głowa jak nie mam nic czyli wskaznik na zero no to chce go ustawić na "tempa" no i się pewnie ustawia ale w taki sposób że nie wiem jak, proszę o pomoc jakbym zrobił w main()...  node *start = new node; start->x = 3; start->next = 0; to wtedy wszystko śmiga.

1 odpowiedź

+1 głos
odpowiedź 11 marca 2018 przez Patrycjerz Mędrzec (192,320 p.)

Funkcja add nie trzyma się kupy. Po pierwsze, cały czas przesyłasz do funkcji head z wartością NULL, więc funkcja stoi w martwym punkcie. Po drugie, w if dodajesz element na początek listy, zaś w else już na koniec. Nieco konsekwencji. Kod poprawiony powinien wyglądać tak:

struct node{
    int x;
    node *next;
};
void add(node **node1, int value)
{
    node *temp = new node;
    temp->x = value;
    temp->next = 0;
    if(*node1 == 0)
    {
        *node1 = temp;
    }
    else{
    node *temp1 = *node1;
    while(temp1->next != 0)
    {
        temp1 = temp1->next;
    }
     temp1->next = temp;
     //node1 = temp1;
    }
}
void print(node *node1)
{
     while(node1!= 0)
    {
        cout << node1->x << endl;
        node1 = node1->next;
 
    }
 
}
int main()
{
    node *start = 0;
     add(&start, 5);
     add(&start, 5);
     add(&start, 5);
     add(&start, 5);
    print(start);
    return 0;
}
komentarz 11 marca 2018 przez lambdag Obywatel (1,310 p.)

Masz jakaś lekturę online o tym właśnie, bo tak sądziłem żeby użyć "dwóch gwiazdek" ale zbytnio jestem laikiem nie znasz jakieś lektury online? btw

void deletel(node *node1, int x)
{
    node *tmp = 0;
    int i = 0;
    node *temp2 = node1;
    while(i != x)
    {
        temp2 = temp2->next;
        i++;
    }
    tmp = temp2->next;
    i = 0;
    while(i != x-1)
    {
        node1 = node1->next;
        i++;

    }
    delete node1->next;
    node1->next = tmp;



}

Niby działa, pytanie czy dobrze?

1
komentarz 11 marca 2018 przez Patrycjerz Mędrzec (192,320 p.)
Co ta funkcja ma robić? Usuwać element o danym indeksie (0 to head)?

Wskaźniki same w sobie nie są trudne. Należy zapamiętać, że obiekt TYP* nazwa przechowuje adresy obiektów typu TYP. To wszystko. W naszym przypadku zmienna node** node1 przechowuje adresy zmiennych typu node*, czyli adresy wskaźników na node.
komentarz 12 marca 2018 przez lambdag Obywatel (1,310 p.)
Można tak powiedzieć że usuwa o danym indeksie tylko głowy nie usuwa bo się tak zastanawiam czy jeśli bym chciał usunąć głowe czy nie prościej po prostu "przepisać dane" z 1 członu do głowy i usunąć 1 człon w takim jednym wypadku?

Podobne pytania

0 głosów
2 odpowiedzi 325 wizyt
pytanie zadane 23 czerwca 2021 w C i C++ przez Eriss69 Gaduła (4,470 p.)
0 głosów
1 odpowiedź 152 wizyt
pytanie zadane 27 czerwca 2018 w C i C++ przez Piotr Lis Obywatel (1,310 p.)
0 głosów
1 odpowiedź 884 wizyt

92,555 zapytań

141,403 odpowiedzi

319,556 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...