2016-06-01 3 views
1

Хорошо работает, когда я вставляю узел в 0-ю позицию, но не тогда, когда я вставляю где-то посередине. Я сохранил указатель prev для перехода до предыдущего узла и я также проверил, должен ли узел быть вставлен в положение хвоста. Я понятия не имею, почему он дает ошибку сегментации. Может ли кто-нибудь помочь мне решить эту проблему? код:Ошибка сегментации при вставке узла в заданное положение одиночно связанного списка с использованием 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

Если вы хотите вставить элемент, не по индексу '0', вы должны сгенерировать узел для каждого индекс до этого. – Rakete1111

ответ

3

Без Minimal, Complete, and Verifiable example никто не может реально помочь вам. Тем не менее, это торчит главным способом:

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

NULL Вы назначаете на prev->next вместо сравнения его с ==.

2

Сомневаюсь ниже код:

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

Вы должны изменить условия, как этот

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

 Смежные вопросы

  • Нет связанных вопросов^_^