2016-09-27 3 views
0

Проблема заключается в том, что при добавлении данных в связанном списке его штраф, но когда мы ищем что-то из списка он говорит, что список пуст Но если я инициализировать этотСвязанный список с помощью C++ подход классов

struct student * head = NULL; 
struct student * curr = NULL; 

вне класса, тогда он отлично работает, мой подход правильный или мы не можем сделать это таким образом?

#include <iostream> 

    using namespace std; 

    struct student{ 
    int data = -100; 
    student * next; 
    }; 

    class linkedlist{ 
    struct student * head = NULL; 
    struct student * curr = NULL; 

    public: 
    void insertitem() 
    { 
     if(head == NULL){ 
     struct student * temp = new student; 
     head = temp; 
     curr = temp; 
     temp->next = NULL; 
     cout << "Enter the data" << endl; 
     cin >> temp->data; 
    } 
     else if(head != NULL){ 
      struct student * temp = new student; 
      curr->next = temp; 
      curr = temp; 
      temp->next = NULL; 
      cout << "Enter the data" << endl; 
      cin >> temp->data; 
     } 
    } 

    void searchitem(int x) 
    { 
     student * temp = new student; 
     temp = head; 
     if(temp != NULL) 
     { 

     while(temp->data != x) 
      { 
      temp = temp->next; //Traversal 

      if(temp == NULL){ 
       break; 
      } 

      } 
     } 
     if(temp != NULL) 
     { 
      cout << "found" << endl; 
      cout << temp->data << endl; 
     } 

     else{ 
      cout << "Not found" << endl; 
     } 
    } 

    }; 

    int main() 
    { 
     int x = -100; 

     while(x != 0){ 
     cout << "--------------------" << endl; 
     cout << "Enter 1 -- Insertion" << endl; 
     cout << "Enter 0--- Terminate" << endl; 
     cout << "--------------------" << endl; 
     cin >> x; 

     linkedlist l1; 

     switch(x) 
     { 
     case 1: 
      l1.insertitem(); 
     break; 
     case 2: 
      l1.searchitem(6); 
     break; 
     } 
     } 
     return 0; 
    } 
+0

Вы протекаете ученика в каждом вызове searchitem, и ваш список может содержать не более двух элементов, пытаясь вставить третий, будет просачиваться хвост. Что вы пытаетесь достичь с помощью этого класса? – Caleth

+0

Полезной методикой отладки для этого является ведение журнала конструктора/деструктора. Вы увидите, что все построено и особенно разрушено, когда они не должны быть. Вы увидите, что больше построено, чем разрушено. –

+0

В C++ вам не нужно ключевое слово 'struct' или' class' при объявлении переменных. Одного имени типа будет достаточно. –

ответ

1

Вы создаете новый linkedlist на каждой итерации.

Извлечь декларацию из цикла.

Смежные вопросы