2014-12-13 1 views
-4

Что я пытаюсь сделать, так это вставить узел со значением в i-ое место связанного списка. Он должен возвращать true, если вставка прошла успешно, в противном случае - false. Я не могу понять, как добавить в начало списка. То, что я пытаюсь, не вставляло. В чем проблема?Почему бы не сменить голову - связанный список реализации

bool insertat(struct Node*head, int value,int loc){ 
    Node *q = new Node;  
    q->data=value; 
    if(loc>list_length(head)){ 
     insertlast(head,value); 
     return true; 
    } 
    else if(loc<=0){ 
     cout<<"invalid location"; 
     return false; 
    } 

    else if(loc==1){ 
     q->next=head; 
     head=q; 
     return true; 
    } 
    else{ 
     int i=1; 
     Node*p =head; 
     while(i<loc-1){ 
      p=p->next; 
      i++; 
     } 
     q->next=p->next; 
     p->next=q; 
     return true; 
    } 
} 
+0

Вам необходимо 'BOOL InsertAt (структура Node * & головки, внутр значение, внутр LOC) {' (Обратите внимание на ссылку '' &!). –

ответ

4

Это потому, что вы передаете указатель по значению. Таким образом, изменения, сделанные для головки в этой функции, теряются.

Скорее изменить свою функцию: -

bool insertat(struct Node**head, int value,int loc) 

и передать адрес головы.

ИЛИ

bool insertat(struct Node*&head, int value,int loc) 
+1

Почему бы не просто ссылку? (и не нужно менять текущий код) –

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