C语言 在链表的末尾插入节点



下面的代码给出了一个错误,我不知道为什么。下面的函数是在链表的末尾插入节点。

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;

相关内容

  • 没有找到相关文章

最新更新