[英]Inserting the node at the end of the linked list
下面的代码给出了一个错误,我不知道为什么。 下面的函数是在链表的末尾插入节点。
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。 因此,您必须将上一个下一个指针分配给 temp,以便将节点 temp 链接到您的列表。就在 while 循环结束之前,p 具有一些值,但下一个指针被分配给 NULL。 所以下一次 prev 有一些数据并且 next 指针为 NULL。 您不会更改此 next 指针以指向下一个 temp 节点。 仅将温度分配给 p。 因此,最后一个 temp 未链接到列表。
循环后尝试:
p=temp;
prev->next=p;
要不就
prev->next=temp;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.