在c中向列表追加的正确方法是什么?我到处找,每次我自己尝试都失败了。
typedef struct node
{
char* groupName;
int groupSize;
boolean status;
struct node* next;
} node;
void add(struct node * *head)
{
struct node* temp=(struct node *)malloc(sizeof(node));
temp->groupName=name;
temp->groupSize=size;
if ((*head) == NULL) {
(*head) = temp;
(*head)->next = NULL;
} else {
struct node* ptr = (*head); //dont change head pointer, so make variable to keep track
while (ptr != NULL) ptr= ptr->next; //go until the end of the list
(ptr->next) = temp; //add this new data to the end of the list
temp->next = NULL; //null becomes end of list
}
}
call(in main():
add(&head);
问题可能在于这行代码:
while(ptr!=NULL) ptr= ptr->next; //go until the end of the list
您可以更改ptr
,直到它等于NULL
,这肯定不是您想要的,因为您在循环之后立即取消引用ptr
。
将其更改为
while(ptr->next != NULL) ptr = ptr->next;
看看这是否有效。请记住:您对还没有下一个节点的节点感兴趣(因此可以插入它)。