Mam taki problem,chcę stworzyć listę jednokierunkową jak w tresci zadania i mam problem czy w funkcji arrayToList dobrze próbuję ją zaimplementować. Chodzi mi o stworzenie listy na bazie danych z tablicy i podstawienie z niej danych. Czy w funkcji arrayTo List trzeba użyć head który pojawia się potem oraz czy trzeba tworzyć jakiś konstruktor do tego? Kod nie jest jeszcze dobry, ale czy w taki sposób się to robi?
Tutaj jest kod z poleceniami:
#include <iostream>
using namespace::std;
struct Node {
int data;
Node* next;
};
Node* arrayToList(const int arr[], size_t size) {
Node *number = new Node;
number = 0;
Node *nextnumber = new Node;
nextnumber = 0;
for (size_t i = 0; i < size; ++i)
{
number->data = arr[i];
number = nextnumber;
}
return number;
}
arrayToList pobiera tablicę int’ów i jej wymiar. Zadaniem funkcji jest utworzenie listy jednokierunkowej obiektów struktury Node,
zawierającej w kolejnych węzłach kolejne liczby z przekazanej tablicy (w takiej samej kolejności!). Funkcja zwraca wskaźnik do „głowy” utworzonej listy.
Node* removeOdd(Node * head) {
}
removeOdd pobiera wskaźnik do „głowy” listy i zwraca wskaźnik do „głowy” listy powstającej z listy pierwotnej po usunięciu wszystkich węzłów,
w których data jest liczbą nieparzystą. UWAGA: Funkcja ta nie powinna tworzyć żadnych nowych węzłów, tylko usuwać te zawierające nieparzyste dane.
Jeśli lista zawiera same liczby nieparzyste, wszystkie węzły powinny zostać usunięte, a funkcja powinna zwrócić nullptr.
Zapewnić, by przy każdym usuwaniu węzła funkcja drukowała wartość danej w nim zawartej, abyśmy widzieli, że rzeczywiście węzły te są usuwane.
void showList(const Node * head) {
}
showList drukuje zawartość listy (dane z kolejnych węzłów, w jednej linii, oddzielone znakami odstępu).
void deleteList(Node * &head) {
}
deleteList usuwa wszystkie węzły listy; wskaźnik do „głowy” przesłany jest przez referencję, aby funkcja mogła zmienić jego oryginał (na nullptr,
co odpowiada liście pustej). Funkcja wypisuje informacje o usuwanych węzłach.
int main() {
int arr[] = { 1,2,3,4,5,6 };
size_t size = sizeof(arr) / sizeof(*arr);
Node* head = arrayToList(arr, size);
showList(head);
head = removeOdd(head);
showList(head);
deleteList(head);
showList(head);
}
/*
1 2 3 4 5 6
DEL:1 DEL:3 DEL:5
2 4 6
del:2 del:4 del:6
Empty list
to jest co powinno wyświetlić
*/