2016-05-03 13 views
0
//creaing a linked list 
    #include <stdio.h> 
    #include <iostream> 
    using namespace std; 

struct node { 
    int data; 
    node *next; 
    }; 

    node *head = NULL; 
    node *tail = NULL; 

これはこれはこれは私がアドオンでの問題を抱えていたコードの一部であるリンクリストリンクされたリストの後ろに追加しようとしていますが、セグメント化エラーが発生しています。

void Transverse(){ 
node *temp1 = new node(); 
temp1 = head; 
while(temp1!=NULL){ 
cout << temp1->data << endl; 
temp1 = temp1 ->next; 
tail = temp1; 
} 
} 

を横断しますリンクリスト

void addToFront(int insert){  

node *temp = new node(); 
temp->data = insert; 
temp->next = head; 
head = temp; 
    } 

の前に追加することですバック関数に戻る

void addToBack(int insert){ 
node * temp = new node(); 
temp -> data = insert; 
temp -> next = NULL; 
if(head==NULL){ 
    head=temp; 
} 
else{ 

    node * temp2= new node(); 
    while(temp2!=NULL){ 
     temp2 = temp2 -> next; 
    } 
    temp2->next= temp; 


    } 

    } 

     int main(){ 


addToBack(4); 
addToFront(1); 
addToFront(2); 
addToFront(3); 
addToBack(4); 
Transverse(); 
return 0; 
     } 
+1

は少しのために考えてみてください。 (鉛筆と紙はリンクリストのデバッグに非常に便利です) – molbdnilo

+0

'addToFront'を呼び出してリストの最初のノードを追加するとどうなりますか? 'tail'はどこに向いていますか?実際、 'tail'変数は何のために使うのですか? –

+0

私はテール変数をすべて使用したとは思わない –

答えて

0

elseブランチでは、 : `temp2`が指している場所について(特に、` temp2-> next`)、それはあなたのリストにどのように関係している間

node * temp2 = head; while(temp2->next != NULL){ temp2 = temp2 -> next; } temp2->next= temp;

+0

これは問題を修正しましたが、私がちょうど変更した理由とその理由を説明できますか? –

+0

コードは、最後のノードに到達するまで頭からリンクされたリストをたどるだけです。テールポインタを使用する場合、これは必要ではありませんが、必要はありません。最後に新しいノードが追加されます。 –

+0

ああ!ノード* temp2 =新しいノード();私のコードtemp 2のこの部分は本当に何かを指していなかったので、それはなぜ正しくループしないのでしょうか? –

関連する問題