2016-08-24 8 views
-2

リンクリストを取得しようとしていますが、これまでのコードです。私のリストの前にノードを追加するとすべてがうまく見えますが、最初のノードを後ろに追加しようとすると、コードがコンパイルされますが、-1が返されます。私は何が間違っているのか分からないが、私はそれがinsertBack()関数にあることを知っている。ところで、他に何か間違っていることがわかったら、それはリンクされたリストの私の最初の試みです! ありがとう!リンクリストがC++で動作しない

#include "LinkedList.h" 
#include <iostream> 
#include <stddef.h> 

LinkedList::LinkedList() 
{ 
    head=NULL; 
    length=0; 
} 

void LinkedList::InsertFront(int item) 
{ 
    Node *temp = new Node; 
    temp->data = item; 
    temp->next = head; 
    head = temp; 
    length++; 
} 

void LinkedList::InsertBack(int item) 
{ 
    Node *temp1 = new Node; 
    temp1 = head; 

    while(temp1->next != NULL) 
    { 
     temp1 = temp1->next; 
    } 
    Node *temp = new Node; 
    temp->data = item; 
    temp->next = NULL; 
    temp1->next = temp; 

    length++; 
} 

void LinkedList::MakeEmpty() 
{ 
    Node *temp; 
    while(head!= NULL) 
    { 
     temp = head; 
     head = head->next; 
     delete temp; 
    } 
    length; 
} 

void LinkedList::ShowItems() 
{ 
    Node *temp = head; 
    while(temp != NULL) 
    { 
     std::cout<<temp->data<<std::endl; 
     temp = temp->next; 
    } 
} 


LinkedList::~LinkedList() 
{ 
    MakeEmpty(); 
} 
+2

また、このミレニアムからいくつかの学習教材を入手するか、80年代教師に教えてください。 –

+1

**現代** C++の「Resource Acquisition Is Initialization」(RAII)とすべての素敵な現代的なポインターを調べるべきです。ここでは良いスタートです:http://stackoverflow.com/questions/395123/raii-and-smart-pointers-in-c – Matt

+0

笑!うわー、ありがとう...! –

答えて

1

ヘッドが参照される前に割り当てられていることを確認してください。インサート・バックを実行すると、最初にヘッドを初期化することに依存しますが、リスト内のすべての要素を最初のものから順番に処理しますが、最初のものがすでに割り当てられていると仮定しているためです。

また、不要なメモリ割り当てが行われます。新しいノードが作成され、すぐにそれを指すものに上書きされるので、そのポイントは何ですか?

Node *temp1 = new Node; 
temp1 = head; 
+0

ありがとう!それは理にかなっている!私はそれを試してみます –

関連する問題