#include <iostream>
using namespace std;
class Node{
public:
int data;
Node* next;
};
//Node* head1 = new Node;
void search(int num , Node* head1)
{
if( (head1 != NULL) & (head1->data == num) )
{
cout << "Yes";
return ;
}
else if(head1 == NULL)
{
cout << "No";
return ;
}
search(num , head1->next);
//return FALSE;
}
int main() {
int max , n;
cin >> n;
Node* head = NULL;
Node* ptr;
for(int i = 0; i < n ; i++)
{
int num;
cin >>num;
Node* temp = new Node;
temp->data = num;
temp -> next = NULL;
if(head == NULL)
{
head = new Node;
head = temp;
ptr = new Node;
ptr = head;
}
else
{
ptr->next = temp;
ptr = ptr->next;
}
// linked list is made;
// traversing through the linked list;
// search for an element;
//cout << head->data <<"\n";
}
search(6 , head);
// I have assumed 6 won't be there in the list
}
Связанный список работает нормально. Я был в состоянии построить список без каких-либо ошибок во время выполнения. Единственная проблема, с которой я столкнулся, связана с методом поиска.
Он будет печатать "YES" идеально, когда элемент для поиска присутствует, но будет возникать ошибка времени выполнения, когда элемента нет, вместо того, чтобы печатать "NO" ;
Я использовал рекурсию (предназначенную) для решения этой проблемы, поскольку мне это не очень удобно.
Чтобы сэкономить время, вы можете игнорировать основную функцию, так как она работает нормально. Я только что предоставил это для справки или любых других ценных предложений.
Также я проверил другие ответы на SO и понял, что большинство ошибок времени выполнения в связанном списке связано с неправильным распределением памяти. Я проверил свой код и обнаружил, что выделение памяти было сделано правильно, или я так думаю.