在链表的末尾插入节点

时间:2015-08-29 08:57:06

标签: c struct 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;
}

在上面的代码中 如果我们将行(p=temp;)替换为prev->next=temp则可行。 请帮助我理解这背后的逻辑。 提前致谢。 问题来自hackrank

1 个答案:

答案 0 :(得分:0)

您将新创建的节点分配给p。该部分是正确的。但是,前一个节点不知道这个新创建的最后一个元素的地址,因为prev->next被赋值为NULL。因此,您必须将前一个下一个指针指向temp,以便节点temp链接到List.Just在while循环结束之前,p有一些值,但下一个指针被赋值为NULL。所以下次prev有一些数据,下一个指针是NULL。您没有将此下一个指针更改为指向下一个临时节点。仅将临时值分配给p。因此,最后一个临时值未链接到列表。

循环后尝试:

 p=temp;
 prev->next=p;

或者只是

prev->next=temp;