下面的代码给出了一个错误,我不知道为什么。下面的函数是在链表的末尾插入节点。
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;
}
在上面的代码中如果我们用prev->next=temp
代替(p=temp;)
,它就能工作。请帮助我理解这背后的逻辑。提前感谢。问题来自hackrank
将新创建的节点分配给p。然而,前一个节点不知道这个新创建的最后一个元素的地址,因为prev->next
被分配给NULL。因此,您必须将前面的next指针赋值给temp,以便将节点temp链接到您的List。就在while循环结束之前,p有一些值,但下一个指针被赋值为NULL。所以下次prev有一些数据时,下一个指针是NULL。你没有改变这个next指针指向下一个是temp的节点,只是将temp赋值给p。因此,最后一个temp不链接到列表。
循环后try:
p=temp;
prev->next=p;
或者只是
prev->next=temp;