2015-09-08 2 views
-1

У меня есть ДОБАВИТЬ узел в конец связанного СПИСОК, он пока не делает никаких ошибок, но, видимо, он тоже не работает. Я просмотрел другие ответы, но не мог понять, что с тобой не так. Я думаю, что проблема может быть с getNext() и NULL. пс: Я использую ГЭССвязанный список C++

Вот метод:

// ADD a node to the end of the Linked list 
void add(const T& dado) 
{ 
    Elemento <T> *novo = new Elemento<T>(dado, NULL); 
    if (novo == NULL) 
    { 
     throw 2; 
    } 
    if (head->getNext() != NULL) 
    { 
     Elemento <T> *auxi = new Elemento<T>(dado, head->getNext()); 
     int i; 
     for (i = 0; auxi->getNext() == NULL; i++) 
     { 
      auxi->setNext(auxi->getNext()); 
      if (auxi->getNext()() == NULL) 
      { 
       size++; 
       auxi->setNext(novo); 
      } 
     } 
    } 
    else 
    { 
     size++; 
     head->setNext(novo); 
    } 
} 

Мой класс Elemento выглядит следующим образом:

#ifndef ELEMENTO_HPP 
#define ELEMENTO_HPP 

template<typename T> 
class Elemento { 
private: 
    T *info; 
    Elemento<T>* _next; 

public: 
    Elemento(const T& info, Elemento<T>* next) : info(new T(info)), _next(next) {} 

    ~Elemento() { 
     delete info; 
    } 

    Elemento<T>* getNext() const  { 
     return _next; 
    } 

    T getInfo() const { 
     return *info; 
    } 

    void setNext(Elemento<T>* next) { 
     _next = next; 
    } 
}; 

#endif 

Вы можете увидеть весь код здесь: http://pastebin.com/7yJfsK8j (имена метод на португальском, но есть комментарии, чтобы объяснить).

+1

Прошли ли вы по отладке своего кода? – Dai

+0

Определите «не работает». –

+3

это еще сентябрь? –

ответ

2

Попробуйте для цикла:

Elemento<T> *ptr; 

//Will iterate until ptr-> getNext() is null (this means ptr is not null). 
for(ptr = head; ptr -> getNext() != NULL; ptr = ptr -> getNext()) 
{ 
    //Does nothing. 
}; 
ptr -> setNext(novo); 

size++; 

Надеется, что это работает!

+0

'size', вероятно, предназначен для хранения размера списка. –

+0

О, хорошо, добавил к моему ответу :-) – hhyder

+0

Я бы сделал еще одно редактирование, чтобы сделать две вещи: 1. Ваша целевая аудитория - новобранец. Будьте ясны как heck и напишите условие завершения в полной форме: 'ptr -> getNext() == NULL'. 2. По той же причине разверните фигурные скобки на их собственных линиях и поместите большой, толстый '// Делает ничего 'комментарий между ними, чтобы забить точку дома. – user4581301

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

  • Нет связанных вопросов^_^