Mam problem dotyczący zadania z treścią:
Zdefiniowana jest struktura Node:
struct Node
{int data;Node* next;
};
Program tworzy listy jednokierunkowe obiektów tego typu. Dla tworzonych list należy zapewnić następującą funkcjonalność:
- dodawanie do listy węzła zawierającego dane typu int w ten sposób, że jeśli na liście jest już węzeł z daną o tej wartości, to nowy węzeł nie jest dodawany,a funkcja zwraca false; w przeciwnym przypadku nowy węzeł jest dodawany(na początek listy), a funkcja zwracatrue;
Do funkcji add oraz clean „głowa” listy (a więc wskaźnik na pierwszy węzeł listy)przekazywana jest przez referencję, tak, aby funkcja mogła ją zmienić. Schemat programu:
#include <iostream>
struct Node {
int data;
Node* next;
};
bool add(Node*& head, int data);
size_t size(const Node* head);
void clear(Node*& head);
void printList(const Node* head);
int main() {
using std::cout; using std::endl;
int tab[] = {1,4,1,3,5};
Node* head = 0;
for (size_t i = 0, e = std::size(tab); i != e; ++i) {
bool b = add(head,tab[i]);
cout << tab[i] << (b ? " " : " NOT ")
<< "added" << endl;
}
//cout << "Size of the list: " << size(head) << endl;
printList(head);
//clear(head);
}
mam taki pomysł by sprawdzić listę przed dodaniem liczby i sprawdzić czy posiada ona już go i jeśli nie to go dodać a jak tak to nie dodawać, ale jak to zrobić? nie wiem jak by to miało wyglądać, mam takie coś co oczywiście nie działa i nie wiem co zrobić by działało dlatego proszę o pomoc:
bool add(Node*& head, int data){
Node* current = head;
Node* new_node = new Node();
while (head != NULL){
if(current->data == data)
return false;
current = current->next;
}
new_node->data = data;
new_node -> next = &(*head);
return true;
}