我是C的新人。
我编写简单的链表应用程序。
这是我的代码:
typedef struct
{
struct node * NextNode;
int data;
}node;
void addNode(int data, node * Head)
{
if (Head == NULL)
{
Head = malloc(sizeof(node));
Head->data = data;
Head->NextNode = NULL;
return;
}
node* CurrentNode = Head;
node* _Newnode = malloc(sizeof(node));
(*_Newnode).data = data;
_Newnode->NextNode = NULL;
while (CurrentNode->NextNode != NULL)
{
CurrentNode = CurrentNode->NextNode;
}
CurrentNode->NextNode = _Newnode;
}
问题的上升是通过Head = NULL
在通过head= NULL
后,Head
没有更改并保持为空
我做错了什么? 你还可以解释一下下面发生了什么吗? 谢谢
答案 0 :(得分:2)
指针按值传递 - 如果更新它,您所做的只是更新它的本地副本。如果你想更新指针,你应该传递指向它的指针,并更新它的解引用:
void addNode(int data, node ** Head)
{
if (*Head == NULL)
{
*Head = malloc(sizeof(node));
*Head->data = data;
*Head->NextNode = NULL;
return;
}
node* CurrentNode = *Head;
node* _Newnode = malloc(sizeof(node));
(*_Newnode).data = data;
_Newnode->NextNode = NULL;
while (CurrentNode->NextNode != NULL)
{
CurrentNode = CurrentNode->NextNode;
}
CurrentNode->NextNode = _Newnode;
}
答案 1 :(得分:1)
指针node * Head
按值传递,如果您要分配到Head
,则需要将其作为node**Head
传递,例如void addNode(int data, node ** Head)
{
if (*Head == NULL)
{
*Head = malloc(sizeof(node));
*Head->data = data;
*Head->NextNode = NULL;
return;
}
node* CurrentNode = *Head;
node* _Newnode = malloc(sizeof(node));
(*_Newnode).data = data;
_Newnode->NextNode = NULL;
while (CurrentNode->NextNode != NULL)
{
CurrentNode = CurrentNode->NextNode;
}
CurrentNode->NextNode = _Newnode;
}
。指向指针的指针。
{{1}}