C 在链接列表的末尾插入节点
下面的代码给出了一个错误,我不知道为什么。 下面的功能是在链表的末尾插入节点C 在链接列表的末尾插入节点,c,struct,linked-list,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
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=温度;使用prev->next=temp它可以工作。
请帮助我理解这背后的逻辑。
提前谢谢。
问题来自。您将新创建的节点分配给p。该部分没有问题。但是,前面的节点不知道这个新创建的最后一个元素的地址,因为prev->next被分配给NULL。因此,您必须将上一个下一个指针指定给temp,以便节点temp链接到您的列表。就在while循环结束之前,p有一些值,但下一个指针被指定为NULL。所以下一次prev有一些数据,而下一个指针为空。您不会将下一个指针更改为指向下一个临时节点。仅将温度分配给p。因此,最后一个临时值不会链接到列表 循环结束后,请尝试:
p=temp;
prev->next=p;
或者只是
prev->next=temp;
试着想想:赋值后p会发生什么?如果两个指针指向同一个内存位置,改变一个不会改变另一个。两个指针完全分开。如果要更改另一个指针,也可以使用指向指针的指针。但是这会使它变得更复杂。Node*Insertstruct Node*head,int data这是C中的语法错误。结构定义不是类型定义你是什么意思?我们不能在到达空指针后分配节点吗?是的,您可以,但您没有这样做。生成的倒数第二个元素的next指针被分配给NULL,而不是temp节点。我正在将p处的值从NULL更改为temp的地址,其中temp->next=NULL。我的代码正确吗?