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

Błąd przy wypisywaniu | lista dwukierunkowa

Cloud VPS
0 głosów
358 wizyt
pytanie zadane 4 czerwca 2019 w C i C++ przez Kaper99 Użytkownik (660 p.)

Witam,
Przy wypisywaniu elementów z listy dwukierunkowej program psuje się zawsze przy wypisywaniu ostatniego elementu tzn. wypisuje wszystkie elementy z listy, a gdy ma wypisać ostatni element wyrzuca błąd.
Podejrzewam, że gdzieś źle ustawiam wskaźnik na następny element, ale nie wiem gdzie. Wrzucam kod, proszę  o przeglądnięcie i pomoc 
 

#include <iostream>
#include <cstdlib>
using namespace std;
struct element {
    int date;
    element* next;
    element* previous;
};
struct lista {
    element* head;
    element* tail;
    int liczba_el = 0;
};
void add_last(lista& l);
void add_first(lista& l);
void show_list(lista l);
int main()
{
    lista l;

    add_first(l);
    add_last(l);
    add_first(l);
    add_first(l);

    show_list(l);

    return 0;
}
void add_last(lista& l)
{

    int a;
    element* nowy = new element;
    cout << "Podaj wartosc do dodania  na koniec\n";
    cin >> a;
    nowy->date = a;
    nowy->next = nullptr;
    nowy->previous = nullptr;
    if (l.tail != nullptr) {
        l.tail->next = nowy;
        nowy->previous = l.tail;
    }
    l.tail = nowy;
    if (l.head == nullptr) {
        l.head = nowy;
    }
    l.liczba_el = l.liczba_el + 1;
}
void add_first(lista& l)
{

    int a;
    element* nowy = new element;
    cout << "Podaj liczbe do dodania na poczatek\n";
    cin >> a;
    nowy->date = a;
    nowy->next = nullptr;
    nowy->previous = nullptr;
    if (l.head != nullptr) {

        l.head->previous = nowy;
        nowy->next = l.head;
    }
    l.head = nowy;
    if (l.tail == nullptr) {
        l.tail = nowy;
    }
    l.liczba_el = l.liczba_el + 1;
}
void show_list(lista l)
{
    element* temp = l.head;

    for (int i = 1; i <= l.liczba_el; i++) {
        cout << "Liczba nr to " << i << " ";
        cout << temp->date << endl;
        temp = temp->next;
    }
}

 

1 odpowiedź

0 głosów
odpowiedź 4 czerwca 2019 przez j23 Mędrzec (195,240 p.)
wybrane 6 czerwca 2019 przez Kaper99
 
Najlepsza

head i tail w lista powinieneś ustawić na nullptr.

komentarz 6 czerwca 2019 przez Kaper99 Użytkownik (660 p.)
Pomogło, dziękuję!

Podobne pytania

0 głosów
1 odpowiedź 297 wizyt
pytanie zadane 26 maja 2018 w C i C++ przez Roman1212 Początkujący (460 p.)
0 głosów
1 odpowiedź 484 wizyt
pytanie zadane 4 maja 2018 w C i C++ przez kikosiak Obywatel (1,010 p.)
0 głosów
1 odpowiedź 1,857 wizyt
pytanie zadane 2 kwietnia 2017 w C i C++ przez chacken Użytkownik (820 p.)

93,488 zapytań

142,421 odpowiedzi

322,772 komentarzy

62,906 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

Kursy INF.02 i INF.03
...