Witam mam do napisania program w sumie prosty ale utknełem na jednej funkcji
Funkcja ma pobierac wskaznik do glowy pewnej listy, utworzonej wczesniej za pomoc
arrayToList. Zadaniem funkcji jest wydzielenie do osobnej listy tych wezlów,
dla których funkcja (predykat) predicate zastosowana do pola data zwraca
true. Funkcja extract zwraca wskaznik do glowy listy zawieraj¡cej wezly
spelniajace predykat, podczas gdy head po powrocie z funkcji zawiera wskaz-
nik do glowy listy wezlów niespelniajacych predykatu

#include <iostream>
using namespace std;
struct Node {
int data;
Node* next;
};
void showList(const Node* head) {
if (!head) {
cout << "Empty list..." << endl;
return;
}
int i=0;
while (head != NULL) {
    if(i>0)
cout << head->data << " ";
head = head->next;
i++;
}
cout << endl;
}
Node* arrayToList(const int tab[], int size) {
Node *List=new Node;
     List->next=NULL;
     List->data=NULL;
     for(int x=0;x<size;x++)
         {
                 Node *temp, *nowy;
                 temp = List;
                 while (temp->next != NULL)
                         temp = temp->next;
                 nowy = new Node;
                 nowy->data = tab[x];
                 nowy->next = NULL;
                 temp->next = nowy;
         }
     return List;
}


Node* extract(Node*& head, bool (*predicate)(int)) {

    Node *wskaznik=head;

    while(wskaznik->next!=NULL){

    if(predicate(wskaznik->next->data)){
    cout<<" Nie pasuje "<<(wskaznik->next->data)<<endl;
                        
                        
                        Node *bad = wskaznik->next;
                        wskaznik->next = bad->next;

            }else
              wskaznik=wskaznik->next;
}
         return wskaznik;
}


void deleteList(Node*& head) {

    Node *wsk=head;
    while(wsk->next!=NULL)
    {
        cout<<" DEL "<<wsk->next->data;

        Node *del = wsk->next;
        wsk->next = del->next;

    }
    cout<<endl;
// ...
}

 bool isEven(int n) { return n%2 == 0; }



int main() {
int tab[] = {2,1,4,3,6,5,7,8};
int size = sizeof(tab)/sizeof(tab[0]);
Node *listA = arrayToList(tab, size);
showList(listA);
Node *listB = extract(listA,isEven);
showList(listA);
showList(listB);

deleteList(listA);

//deleteList(listB);
}

No i niestety nie wiem jak utworzyc liste elementow ktore nie pasuja to preedykatu
potrafie je wypisac ale jak je wrzucic do listy
Dodatkowo funkcja extract nie moze tworzyc nowych obiektow typu Node
Z gory dzieki za wszelkie rady