2016-05-03 7 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; 

Dies ist auf der Vorderseite der verknüpften ListeIch versuche, auf der Rückseite der verknüpften Liste hinzuzufügen, aber ich bekomme Segmentierung Fehler, kann jemand erklären, warum?

void addToFront(int insert){  

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

Dies wird quer zu der verknüpften Liste

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

Dies ist der Teil des Codes hinzufügen ich Probleme mit habe durch Add zur rückseitigen Funktion

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

für ein wenig denken, während du 'temp2' zeigt (insbesondere' temp2-> next') und wie es zu Ihrer Liste in engen Zusammenhang steht. (Stift und Papier sind äußerst hilfreich beim Debuggen von verknüpften Listen.) – molbdnilo

+0

Was passiert, wenn Sie 'addToFront' aufrufen, um den allerersten Knoten in der Liste hinzuzufügen? Wohin wird der "Schwanz" zeigen? Eigentlich, wofür benutzt du die 'tail'-Variable? –

+0

Ich denke nicht, dass ich die Schwanzvariable überhaupt verwendet habe –

Antwort

0

Im else-Zweig möchten Sie dies vielleicht :

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

+0

Das behebt das Problem, aber können Sie erklären, was ich gerade geändert habe und warum? –

+0

Der Code läuft nur auf der verketteten Liste von Kopf bis zum letzten Knoten. Wenn Sie den Tail-Zeiger verwenden würden, wäre dies nicht notwendig, aber Sie nicht. Am Ende wird nur der neue Knoten hinzugefügt. –

+0

Ahhh! Knoten * temp2 = neuer Knoten(); Dieser Teil meines Code Temp 2 zeigte nicht wirklich auf etwas, also warum es nicht richtig durchlaufen würde? –

Verwandte Themen