Ваша итерация верна, но есть проблема с вашей функцией printNodes
. Это разыменование tmpNode
без проверки null
:
void printNodes() {
Node* tmpNode = head;
cout << tmpNode->data; // <-- here
while (tmpNode->next != nullptr) {
std::cout << tmpNode->data;
tmpNode = tmpNode->next;
}
}
Я бы изменил его на следующее:
void printNodes() {
Node* tmpNode = head;
while (tmpNode != nullptr) {
std::cout << tmpNode->data << ", ";
tmpNode = tmpNode->next;
}
}
Кроме того, как сказано в комментариях, если вы установите next
член в null
в конструкторе Node
он должен работать нормально.
Для поиска это то же самое, но проверка данных:
Node* findNode(int el) {
Node* tmpNode = head;
Node* ret = nullptr;
while (tmpNode != nullptr) {
if (tmpNode->data == el) {
ret = tmpNode;
break;
}
tmpNode = tmpNode->next;
}
return ret;
}
И в main
:
Node* n = myList.findNode(10);
if (n)
std::cout << "N 10: " << n->data << "\n";
n = myList.findNode(30);
if (n)
std::cout << "N 30: " << n->data << "\n";
else
std::cout << "There is no N 30\n";
Также есть проблемы с утечкой памяти, как указано @RikusHoney в комментариях.