#include <iostream>
using namespace std;

struct lista {
    int dana;
    lista* nast;
};

// Dodanie elementu x do listy na pozycji i
void Insert(lista*& pocz, int x, int i) {
    
}

// Usunięcie elementu na pozycji i
bool Remove(lista*& pocz, int i, int& co) {
    
}

// Zwrócenie i-tego elementu z listy bez usuwania
bool Read(lista* pocz, int i, int& co) {
   
}

// Wskaźnik do elementu zawierającego wartość x
lista* Search(lista* pocz, int x) {
 
}

// Funkcja do wyświetlania listy
void Print(lista* pocz) {
    lista* temp = pocz;
    while (temp != nullptr) {
        cout << temp->dana << " -> ";
        temp = temp->nast;
    }
    cout << "nullptr" << endl;
}

int main() {
    lista* pocz = nullptr;

    Insert(pocz, 10, 0);  // Dodanie 10 na pozycję 0
    Insert(pocz, 20, 1);  // Dodanie 20 na pozycję 1
    Insert(pocz, 15, 1);  // Dodanie 15 na pozycję 1
    cout << "Lista po dodaniu elementów: ";
    Print(pocz);

    int val;
    if (Read(pocz, 1, val)) {
        cout << "Element na pozycji 1: " << val << endl;
    } else {
        cout << "Nie udało się odczytać elementu na pozycji 1." << endl;
    }

    lista* found = Search(pocz, 15);
    if (found != nullptr) {
        cout << "Znaleziono element z wartością 15: " << found->dana << endl;
    } else {
        cout << "Nie znaleziono elementu z wartością 15." << endl;
    }

    int removedVal;
    if (Remove(pocz, 1, removedVal)) {
        cout << "Usunięto element o wartości: " << removedVal << endl;
    } else {
        cout << "Nie udało się usunąć elementu na pozycji 1." << endl;
    }
    cout << "Lista po usunięciu elementu: ";
    Print(pocz);

    // Sprzątanie pamięci
    while (pocz != nullptr) {
        lista* temp = pocz;
        pocz = pocz->nast;
        delete temp;
    }

    return 0;
}
