2016-10-27 2 views
0

Я хочу создать связанный список с классами. У меня есть два класса: один LinkedList и другой LinkedNode. Моя проблема в том, что моя функция InsertAtEnd всегда удаляет текущий узел. Поэтому, когда я хочу распечатать связанный список, я ничего не вижу. Я знаю благодаря отладчику, что в функции InsertAtEnd мы не входим в цикл while, это проблема. Но после нескольких попыток я не могу решить свою проблему.Связанный список перезаписывает предыдущее значение

Это мой код:

void LinkedList::InsertAtend(int data) 
{ 
    LinkedNode* node = new LinkedNode(); 
    node->setData(data); node->setNext(nullptr); 

    LinkedNode* tmp = _header; 
    if (tmp != NULL) 
    { 
     while (tmp->getNext() != nullptr) 
     { 
      tmp = tmp->getNext(); 
     } 
     tmp->setData(data); 
     tmp->setNext(nullptr); 
    } 
    else 
    { 
     _header = node; 
    } 
} 

Мой класс LinkedNode:

class LinkedNode 
{ 
public: 
    LinkedNode(); 
    ~LinkedNode(); 
    void setData(int data); 
    void setNext(LinkedNode* next); 

    int getData() const; 
    LinkedNode* getNext() const; 

private: 
    int _data; 
    LinkedNode* _next; 
}; 

Мой класс LinkedList: #pragma раз #include #include "LinkedNode.h" с использованием патезрасе ;

class LinkedList 
{ 
public: 
    LinkedList(); 
    ~LinkedList(); 
    void PrintList(); 
    void InsertAtend(int data); 
    void PrintList() const; 

private: 
    LinkedNode* _header; 
}; 

Благодарим за помощь!

ответ

1

tmp является последним узлом, поэтому, если вы не хотите его удалять, вы не должны писать значение data. Вы должны связать его с новым узлом, который вы назвали node.

Вместо

tmp->setData(data); 
tmp->setNext(nullptr); 

Вы должны написать

tmp->setNext(node) 
2

tmp->setData(data); Ваш tmp не является узлом, который вы пытаетесь добавить, но последним в своем списке.

+0

Что? Можете ли вы объяснить больше? –

+0

node = ваш новый узел для добавления; так почему вы меняете данные на любом другом узле? – UKMonkey

+0

Что я могу сделать tmp = node? –

0

В конце цикла, tmp является последним узлом в текущем списке. Как вы хотите, чтобы добавить новый node после последнего узла, необходимо

tmp->setNext(node); 

, чтобы добавить его (а не набор данных, как данные уже установлены в новом node).

Также обратите внимание, что вам вообще не нужно перебирать весь список, если вы сохраняете другую переменную-член в текущем конце списка (_tail). Затем вы можете получить к нему доступ напрямую и просто добавить и обновить.

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