在链表的末尾插入节点

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;