繁体   English   中英

在链表末尾插入节点

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM