2016-10-27 15 views
0

クラスでリンクされたリストを作成したいと思います。私はLinkedListとLinkedNodeという2つのクラスを持っています。私の問題は、私の関数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:名前空間stdを使用して、一度 の#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を追加するとして、あなたはそれを追加(およびデータはすでに新しいnodeに設定されているとしてデータを設定されていない)し

tmp->setNext(node); 

する必要があります。

リストの現在の末尾に別のメンバー変数を保持する場合は、実際にリスト全体を反復処理する必要はありません(_tail)。その後、直接アクセスして追加して更新することができます。

関連する問題