В приведенном ниже кодеграмме выдается сообщение об ошибке, я понятия не имею, почему. Следующая функция заключается в том, чтобы вставить узел в конец связанного списка.Вставка узла в конец связанного списка
struct Node {
int data;
struct Node *next;
};
Node* Insert(struct Node *head,int data)
{
struct Node *p;
p=head;
struct Node *prev;
struct Node *temp=(struct Node*)malloc(sizeof(struct Node));
temp->data=data;
temp->next=NULL;
if(head==NULL){
head=temp;
return head;
//return temp;
} ``
while(p!=NULL){
prev=p;
p=p->next;
}
p=temp;//If we change this line to prev->next=temp .It is giving the correct result
return head;
}
В приведенном выше коде если заменить строку (p=temp;)
с prev->next=temp
он работает. Пожалуйста, помогите мне понять логику этого. Спасибо заранее. Вопрос от hackrank.
Try думать: что будет происходить с 'p' после выполнения задания? – qrdl
Если два указателя указывают на одно и то же место памяти, изменение одного не меняет другого. Оба указателя полностью разделены. Если вы хотите изменить другой указатель, вы также можете использовать указатель на указатель. Но это значительно усложнит ситуацию. – wimh
[Не набрасывать возвращаемое значение 'malloc'.] (Http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc) – MC93