2016-06-01 12 views
1

Es funktioniert gut, wenn ich Knoten an der 0. Stelle einfügen, aber nicht wenn ich irgendwo in der Mitte einfügen. Ich habe Zeiger prev bis zum vorherigen Knoten von Zielposition und ich habe auch überprüft, ob der Knoten an der Endposition eingefügt werden soll. Ich habe keine Ahnung, warum es Segmentierungsfehler gibt. Kann mir jemand helfen, dieses Problem zu lösen? Code ist:Segmentierung Fehler beim Einfügen von Knoten an der angegebenen Position der einfach verketteten Liste mit C++

Node* InsertNth(Node *head, int data, int position) 
{ 
    Node * temp=new Node; 
    int i=1; 
    temp->data=data; 
    temp->next=NULL; 
    Node * prev; 
    if(position==0) 
     {if(head==NULL) 
     head=temp; 
     else 
      { 

      temp->next=head; 
      head=temp; 
      } 
     } 

    else 
    { 
     prev=head; 
     while(i!=position) 
      { 
      i++; 
      prev=prev->next; 
     } 
     if(prev->next=NULL) 
      { 
      prev->next=temp; 
     } 
     else 
      { 
      temp->next=prev->next; 
      prev->next=temp; 

     } 
    } 
    return head; 

} 
+1

ändern sollten Wenn Sie ein Element einfügen wollen nicht mit dem Index '0', müssen Sie einen Knoten erzeugen jeweils Index davor. – Rakete1111

Antwort

3

Ohne Minimal, Complete, and Verifiable example niemand wirklich helfen kann. Trotzdem klebt diese in einem großen Weg heraus:

if(prev->next=NULL) { 
    prev->next=temp; 
} 

Sie ordnen NULL zu prev->next anstatt es mit == zu vergleichen.

2

ich unten Code Zweifel:

while(i!=position) 
      { 
      i++; 
      prev=prev->next; 
     } 

Sie erhalten wie diese

while(prev && i!=position) 
{ 
    i++; 
    prev=prev->next; 
}