在链表的末尾插入节点
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.That部分就可以了。然而,前一个节点不知道这个新创建的最后一个元素的地址,因为 prev->next
被分配给 NULL。因此,您必须将前一个 next 指针分配给 temp,以便在 while 循环结束之前将节点 temp 链接到您的 List.Just p 具有一些值,但 next 指针分配给 NULL。所以下次 prev 有一些数据并且 next 指针为 NULL。您没有更改此 next 指针以指向下一个临时节点。仅将温度分配给 p。因此,最后一个临时文件未链接到列表。
循环后尝试:
p=temp;
prev->next=p;
或者只是
prev->next=temp;
下面的代码出错了,我不知道为什么。 下面的函数是在链表的末尾插入节点。
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.That部分就可以了。然而,前一个节点不知道这个新创建的最后一个元素的地址,因为 prev->next
被分配给 NULL。因此,您必须将前一个 next 指针分配给 temp,以便在 while 循环结束之前将节点 temp 链接到您的 List.Just p 具有一些值,但 next 指针分配给 NULL。所以下次 prev 有一些数据并且 next 指针为 NULL。您没有更改此 next 指针以指向下一个临时节点。仅将温度分配给 p。因此,最后一个临时文件未链接到列表。
循环后尝试:
p=temp;
prev->next=p;
或者只是
prev->next=temp;