这不会去任何地方,你从头开始,如果那不是空的,那么你说“继续前进,而下一个是空的”。如果 next 不为空,您仍将保持领先。
要在列表末尾添加,您需要以下内容:
else
{
while(curr->next != NULL) // keep going while curr->next is not null
{
curr = curr->next; // advance the pointer
}
// Here curr->next will definitely be null
curr->next = newnode; // now point curr->next to the new node
}
有人已经指出,curr == NULL
在第一次检查的情况下,一旦你完成了赋值,你就不会返回指针,并且 head 永远不会被初始化。
你可以通过在head
这个函数的范围之外声明,或者在你的函数签名中有一个指向指针的指针,例如:
int add_node(struct node** head) // I'll assume this is how you've declared your add function
// ^^ notice the pointer to pointer
{
struct node* curr = *head; // curr assignment changes slightly
struct node* newnode = malloc(sizeof(struct node));
newnode->data = item;
newnode->next = NULL;
if (curr == NULL)
{
*head = newnode; // this will dereference the pointer to the pointer and update head without returning anything
}
其余的保持不变。